2016-04-13 4 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 

場合3~5 及びプリント読み取り値は、我々が</p> <pre><code>2 3 4 5 </code></pre> <p>はそれだけで値を割り当てる行列内の値を読み取る

3 3 
5 5 
+0

POSIXシェルには配列がありません。どのシェルについて話していますか?他には2D配列はありませんので、あなたが何をしようとしているのかは不明です。 –

+0

@ DavidC.Rankin bash shell –

+0

あなたができることは最高ですbashは索引算術を使って2D配列をシミュレートしていますが、どのように 'a'を埋めましたか? [i] [j]を読むことはできません。 –

答えて

2

あなたが2Dアレイをシミュレートすることができいくつかの方法でインデックス演算を行うことができます。

#!/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 

出力

$ bash sim2darray.sh 
1 
2 
3 
4 
    1 2 
    3 4 

あなたは見栄えのシミュレートされた2次元配列にすることができ、フォーマットのいくつかの追加ビットで:

#!/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 

使用例をここでは一般的な方法であり、 /出力

$ 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 ]] 
関連する問題