bash中多维数组的长度

时间:2017-10-07 12:23:49

标签: arrays linux 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  

主要剧本:

所有评论都表示赞赏

2 个答案:

答案 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