Sie können mit 2D-Arrays simulieren Indexarithmetik auf verschiedene Arten. Hier ist eine gängige Methode:
#!/bin/bash
## read values into a 1D array using nested loops and
## simulated 2D addressing
for ((i = 0; i < 2; i++)); do
for ((j = 0; j < 2; j++)); do
read a[$((i * 2 + j))]
done
done
## Output the values contained in a simulated 2D manner
for ((i = 0; i < 2; i++)); do
for ((j = 0; j < 2; j++)); do
printf " %2d" ${a[$((i * 2 + j))]}
done
echo ""
done
Ausgabe
$ bash sim2darray.sh
1
2
3
4
1 2
3 4
Mit ein paar zusätzlichen Bits der Formatierung Sie eine gut aussehende simulierte 2D-Array machen:
#!/bin/bash
for ((i = 0; i < 5; i++)); do
for ((j = 0; j < 5; j++)); do
a[$((i * 5 + j))]=$((i * 5 + j))
done
done
printf "\nThe simulated 5x5 2D array:\n\n"
for ((i = 0; i < 5; i++)); do
[ "$i" -eq 0 ] && printf "[[" || printf " ["
for ((j = 0; j < 5; j++)); do
printf " %3d" ${a[$((i * 5 + j))]}
done
[ "$i" -eq 4 ] && printf " ]]\n\n" || printf " ]\n"
done
Beispiel Verwendung/Ausgabe
$ bash sim2darray.sh
The simulated 5x5 2D array:
[[ 0 1 2 3 4 ]
[ 5 6 7 8 9 ]
[ 10 11 12 13 14 ]
[ 15 16 17 18 19 ]
[ 20 21 22 23 24 ]]
Es gibt keine Arrays in der POSIX-Shell, von welcher Shell sprechen Sie? Es gibt keine 2D-Arrays in anderen, daher ist unklar, was Sie versuchen. –
@ DavidC.Rankin Bash Shell –
Das Beste, was Sie tun können Bash simuliert ein 2D-Array mit Indexarithmetik, wie haben Sie 'a' gefüllt? Sie können 'a [i] [j] 'nicht lesen. –