たとえば、ハッシュを使用してそれらをシミュレートできますが、先頭のゼロや他の多くのことに注意する必要があります。次のデモンストレーションは機能しますが、最適なソリューションにはほど遠いです。
#!/bin/bash
declare -A matrix
num_rows=4
num_columns=5
for ((i=1;i<=num_rows;i++)) do
for ((j=1;j<=num_columns;j++)) do
matrix[$i,$j]=$RANDOM
done
done
f1="%$((${#num_rows}+1))s"
f2=" %9s"
printf "$f1" ''
for ((i=1;i<=num_rows;i++)) do
printf "$f2" $i
done
echo
for ((j=1;j<=num_columns;j++)) do
printf "$f1" $j
for ((i=1;i<=num_rows;i++)) do
printf "$f2" ${matrix[$i,$j]}
done
echo
done
上記の例では、乱数を使用して 4x5 マトリックスを作成し、それを転置して出力し、結果の例を示します
1 2 3 4
1 18006 31193 16110 23297
2 26229 19869 1140 19837
3 8192 2181 25512 2318
4 3269 25516 18701 7977
5 31775 17358 4468 30345
原則は次のとおりです。インデックスが 3,4
のような文字列である 1 つの連想配列を作成する .メリット:
- 任意の次元の配列に使用できます;) 次のように:
30,40,2
3 次元用。 - 構文は配列のように "C" に近い
${matrix[2,3]}
Bash には多次元配列がありません。ただし、連想配列を使用して多少似た効果をシミュレートできます。以下は、多次元配列として使用されるように装った連想配列の例です:
declare -A arr
arr[0,0]=0
arr[0,1]=1
arr[1,0]=2
arr[1,1]=3
echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1
配列を連想として宣言しない場合 (-A
を使用) )、上記は機能しません。たとえば、declare -A arr
を省略した場合 行、echo
2 3
を出力します 0 1
の代わりに 、なぜなら 0,0
、 1,0
これは算術式と見なされ、0
と評価されます。 (コンマ演算子の右側の値)