2016-04-13 6 views
1
# reading into array 
for((i=0;i<2;i++)) do 
    for((j=0;j<2;j++)) do 
     read a[i][j]   
    done 
done 

# printing 
for((i=0;i<2;i++)) do 
    for((j=0;j<2;j++) do 
     echo -n ${a[i][j]}" " 
    done 
    echo 
done 

Wenn wir lesen, die Werte in der Matrixlesen Wert in Matrix in Shell-Skript

2 3 
4 5 

es weist nur die Werte 3 5 und Drucke

3 3 
5 5 
+0

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. –

+0

@ DavidC.Rankin Bash Shell –

+0

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. –

Antwort

2

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 ]]