2017-07-21 9 views
1

私は数多くのアレイを持ち、それぞれを取って長さをチェックしたいと思っています。bashで配列を反復する方法

#!/bin/bash 

arr1=(1 2 3 4) 
arr2=(foo) 
arrN=(1 2 3 4 a b c d) 
for arr in $arr1 $arr2 $arrN 
do 
     echo "${#arr[@]}" # $arr1 must be 4, right? Wrong. 
     if [ ${#arr[@]} == 1 ] 
     then echo "short" 
     elif [ ${#arr[@]} >= 4 ] 
     then echo "long" 
     else echo "so so" 
     fi 
done 

しかし、私は期待していない出力を得ています。

[email protected]:~$ ./test.sh 
1 
short 
1 
short 
1 
short 

私はなぜそれがそのように働いているのか分かりませんが、それを修正する方法はわかりません。

+0

、 '$の編曲を== $ {arr1 [0]} ' しかし、私は' $ arr1'を '$ arr'に入れますか? – kusayu

答えて

1

Bashは多次元配列をサポートしていません。

したがって、for arr in $arr1 $arr2 $arrNは機能しません。

次のコードは動作します:

arr1=(1 2 3 4) 
echo "${#arr1[@]}" # $arr1 is 4 

あなたは、配列の長さを返す関数を書くことができ(および/またはあなたが望む出力印刷):また

function myArrLen { 
     arr=("[email protected]") 
     echo "${#arr[@]}" 
     echo "Some other stuff you want to do.." 
    } 

arrA=(1, 2, 3, 4, 5) 
arrB=(1, 2, 3) 

myArrLen "${arrA[@]}" 
myArrLen "${arrB[@]}" 
+0

しかし、それを反復する方法はありますか?同様に、もし私が本当にたくさんの配列を持っていたら、どうすればそれらをチェックできますか? – kusayu

+1

あなたのニーズを満たす機能を書くことができます。私は答えに例を追加しました。 –

関連する問題