以 bash 为单位的多维数组的长度



我有一个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  

主脚本:

感谢所有评论

Bash 不支持多维数组。方括号中的列表按照逗号运算符的 C 规则计算,即它返回最后一个元素:

matrix[0,1]=a
echo ${matrix[0]}   # nothing
echo ${matrix[1]}   # a

使用数字索引数组,@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 "%sn" "${!arr[@]}" | grep "^$i,"
1,5
1,4
1,6
1,1
1,3
1,2
$ j=1; printf "%sn" "${!arr[@]}" | grep ",$j$"
5,1
3,1
2,1
4,1
1,1

最新更新