我在bash脚本中有一个2D数组,我想知道每个维度的长度。
for example :
array[1,1] = 1 array[1,2] = 1
array[2,1] = 1 array[2,2] = 1
array[3,1] = 1 array[3,2] = 1
array[4,1] = 1 array[4,2] = 1
the number of rows : 4
主要剧本:
所有评论都表示赞赏
答案 0 :(得分:1)
Bash不支持多维数组。方括号中的列表沿着逗号运算符的C规则进行计算,即返回最后一个元素:
matrix[0,1]=a
echo ${matrix[0]} # nothing
echo ${matrix[1]} # a
答案 1 :(得分:1)
使用数字索引数组,@ choroba是完全正确的: 方括号的内容按算术进行评估。
$ for i in $(seq 5); do for j in $(seq 6); do arr[$i,$j]="$i$j"; done; done
$ declare -p arr
declare -a arr='([1]="51" [2]="52" [3]="53" [4]="54" [5]="55" [6]="56")'
如果使用关联数组,则可以伪造多维度:
$ unset arr; declare -A arr
$ for i in $(seq 5); do for j in $(seq 6); do arr[$i,$j]="$i$j"; done; done
$ declare -p arr
declare -A arr='([5,1]="51" [3,6]="36" [5,3]="53" [3,5]="35" [5,2]="52" [3,4]="34" [5,5]="55" [3,3]="33" [5,4]="54" [3,2]="32" [3,1]="31" [5,6]="56" [2,6]="26" [2,4]="24" [2,5]="25" [2,2]="22" [2,3]="23" [2,1]="21" [4,1]="41" [4,2]="42" [4,3]="43" [4,4]="44" [4,5]="45" [4,6]="46" [1,5]="15" [1,4]="14" [1,6]="16" [1,1]="11" [1,3]="13" [1,2]="12" )'
但它仍然是一维数组
$ echo "${#arr[@]}"
30
你必须知道数组的一些内容才能找到尺寸(假设它是一个正方形的“矩阵”)
$ i=1; printf "%s\n" "${!arr[@]}" | grep "^$i,"
1,5
1,4
1,6
1,1
1,3
1,2
$ j=1; printf "%s\n" "${!arr[@]}" | grep ",$j$"
5,1
3,1
2,1
4,1
1,1