shell練習--關於二維數組的實現問題


關於二維數組的實現問題:通過查詢網友們的記錄,可知有兩個方法

方法1:通過通過2次讀取賦值,來獲取二維數組的方法。

a=('1 2 3'  '4 5 6'  '7 8 9')

for i in "${a[@]}" ; do
b=($i) #此時b就相當於二維數組里面的一維數組了,然后可以再次遍歷
    for j in "${b[@]}"; do
        #do someting
    done
done

  但是這樣寫之后,發現一個問題:${a[@]}和${a[*]} 一般情況下都能顯示全部的數組元素,但是要實現二維數組的效果,不能使用${a[*]},使用${a[*]}對於for循環而言,直接讀取全部的記錄

示例如下:

arr=('Joe Math990112 89' 'Mike CS991301 100' 'Mary EE990830 95')
+ for i in '"${arr[*]}"'
+ echo Joe Math990112 89 Mike CS991301 100 Mary EE990830 95   #此處打印$i
Joe Math990112 89 Mike CS991301 100 Mary EE990830 95
+ arr2=($i)
+ echo Joe Math990112 89 Mike CS991301 100 Mary EE990830 95   #此處打印${arr2[*]}
Joe Math990112 89 Mike CS991301 100 Mary EE990830 95

 方法2:使用行列位置來做判斷:

#/bin/bash
arr4=(Joe Math990112 89 Mike CS991301 100 Mary EE990830 95)

h=0
for (( h >=0 ;h <= $(expr ${#arr[*]} / 3 );h++))
do
        name=${arr4[$(expr $h \* 3  + 0)]}   #本例中,列數為3,那么對應二維值就是 (0 1 2) (3*1+0 3*1+1 3*1+2)(3*2+0 3*2+1 3*2+2)
        num=${arr4[$(expr $h \* 3  + 1)]}
        score=${arr4[$(expr $h \* 3  + 2)]}
        echo "$name >> $num >> $score"
done

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM