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