Anda dapat mensimulasikannya misalnya dengan hash, tetapi perlu memperhatikan angka nol di depan dan banyak hal lainnya. Demonstrasi berikutnya berhasil, tetapi ini jauh dari solusi optimal.
#!/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
contoh di atas membuat matriks 4x5 dengan bilangan acak dan mencetaknya ditransposisikan, dengan hasil contoh
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
Prinsipnya adalah:Membuat satu array asosiatif yang indeksnya berupa string seperti 3,4
. Manfaatnya:
- dapat digunakan untuk array berdimensi apa saja;) seperti:
30,40,2
untuk 3 dimensi. - sintaksnya dekat dengan "C" seperti larik
${matrix[2,3]}
Bash tidak memiliki array multidimensi. Tapi Anda bisa mensimulasikan efek yang agak mirip dengan array asosiatif. Berikut ini adalah contoh larik asosiatif yang berpura-pura digunakan sebagai larik multidimensi:
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
Jika Anda tidak mendeklarasikan array sebagai asosiatif (dengan -A
), di atas tidak akan berfungsi. Misalnya, jika Anda menghilangkan declare -A arr
baris, echo
akan mencetak 2 3
bukannya 0 1
, karena 0,0
, 1,0
dan itu akan dianggap sebagai ekspresi aritmatika dan dievaluasi menjadi 0
(nilai di sebelah kanan operator koma).