Bash で次元が不明な 2D 配列を生成する

Bash で次元が不明な 2D 配列を生成する

ユーザー入力前に次元がわからない場合に 2D 配列を生成できるかどうか疑問に思っています。たとえば、ユーザーがコマンドラインで 2 2 と入力すると、シェルはそれに基づいて 2D 配列を生成しますか? ありがとうございます

答え1

bashはインタープリタ型言語であり、事前にどれだけのメモリを割り当てるかを知る必要はありません。

したがって、新しい配列を宣言せずに動的に初期化したり、すでに宣言されている配列を拡張してエントリを追加したりすることは可能ですが、多次元配列を使用することはできません。

しかし、これは偽装することができます。あなたが達成すべき正確なタスクを提供していないので、bashユーザー定義のm x nテーブルにランダムな数字(各列は各実行ですべての行に常に同じ番号を持つため、実際にはランダムではありませんが、これは質問とは関係ありません)を入力して印刷する方法を示すスクリプトの例を提供します(これStack Overflow の回答):

#!/bin/bash

declare -a array
read -p 'm: ' m
read -p 'n: ' n
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        a[${i},${j}]=$RANDOM
    done
done
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        echo -ne "${a[${i},${j}]}\t"
    done
    echo
done

答え2

1D 配列を宣言し、実行時にすべての数値を 1D 配列に読み込むことができます。次元がわかれば、1D 配列を「2D 配列のように」処理できます。

例えば、1次元配列に

[1, 5, 9, 11]

本当に望むなら

[[1,5], [9,11]]

配列のインデックス0が[1,5]である場合、[1,5] (pos = 0)にアクセスするには次のようにします。

疑似コード

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

[9,11]にアクセスする(pos = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

これが意味を成すといいのですが。実際、2D 配列は 1D 配列の一種です。

関連情報