Sie können sie zum Beispiel mit Hashes simulieren, müssen sich aber um die führenden Nullen und viele andere Dinge kümmern. Die nächste Demonstration funktioniert, aber sie ist weit von der optimalen Lösung entfernt.
#!/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
Das obige Beispiel erstellt eine 4x5-Matrix mit Zufallszahlen und gibt sie transponiert aus, mit dem Beispielergebnis
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
Das Prinzip ist:Erstellen eines assoziativen Arrays, bei dem der Index ein String wie 3,4
ist . Die Vorteile:
- kann für beliebig dimensionierte Arrays verwendet werden;) wie:
30,40,2
für 3 dimensional. - Die Syntax ist ähnlich wie "C" wie Arrays
${matrix[2,3]}
Bash hat kein mehrdimensionales Array. Aber Sie können einen etwas ähnlichen Effekt mit assoziativen Arrays simulieren. Das Folgende ist ein Beispiel für ein assoziatives Array, das vorgibt, als mehrdimensionales Array verwendet zu werden:
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
Wenn Sie das Array nicht als assoziativ deklarieren (mit -A
), das oben wird nicht funktionieren. Zum Beispiel, wenn Sie declare -A arr
weglassen Zeile, die echo
druckt 2 3
statt 0 1
, weil 0,0
, 1,0
und wird als arithmetischer Ausdruck genommen und zu 0
ausgewertet (der Wert rechts vom Komma-Operator).