2017-10-07 80 views
0

我在bash腳本中有一個二維數組,我想知道每個維度的長度。bash中多維數組的長度

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

你可以告訴你的二維數組是什麼意思? – choroba

+0

類似這個矩陣[$ length,1] = value – Donald

+0

'matrix [$ length,1] = value'賦值給'matrix [1]'。 – choroba

回答

1

擊不支持多維數組。方括號中的列表被沿着逗號運算符的C規則來評估,即,其返回最後一個元件:

matrix[0,1]=a 
echo ${matrix[0]} # nothing 
echo ${matrix[1]} # a 
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 
+0

實際上我不知道Array的長度(數組是由循環構建的)。我想知道如何在循環中創建這樣一個數組,以及如何對其行進行計數,假設數組有兩個維度,第一個維度是固定的(列),第二個維度在運行時會更改。 – Donald

+0

echo「$ {#arr [@]}」 - >這個命令適用於我,但是如何將它分配給一個變量...... lenght = $ {#matrix [@]} echo「$ {lengthl} 「 – Donald

+0

其實我想知道行號 – Donald