2017-07-21 46 views
1

我有許多arays,並且想要分別檢查它們並檢查其長度。如何在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

也,'$ ARR == $ {arr1 [0]}' 但是,我怎麼把ann'$ 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

你可以編寫一個能滿足你需求的函數。我已經爲我的答案添加了一個示例。 –