1. 普通陣列
bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。類似與C語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。
1.1 定義陣列
在Shell中,用括號來表示陣列,陣列元素用“空格”符號分割開。定義陣列的一般形式為:
array_name=(value1 ... valuen)
array_name=(value0 value1 value2 value3) array_name=( value0 value1 value2 value3 )
還可以單獨定義陣列的各個分量:
array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
可以不使用連續的下標,而且下標的範圍沒有限制。
1.2 讀取陣列
讀取陣列元素值的一般格式是:
${array_name[index]}
例如:
- valuen=${array_name[2]}
舉個例子:
#!/bin/sh NAME[0]="Zara" NAME[1]="Qadir" NAME[2]="Mahnaz" NAME[3]="Ayan" NAME[4]="Daisy" echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"
執行指令碼,輸出:
$./test.sh First Index: Zara Second Index: Qadir
使用@ 或 * 可以獲取陣列中的所有元素,例如:
${array_name[*]}
${array_name[@]}
舉個例子:
#!/bin/sh NAME[0]="Zara" NAME[1]="Qadir" NAME[2]="Mahnaz" NAME[3]="Ayan" NAME[4]="Daisy" echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"
執行指令碼,輸出:
$./test.sh First Method: Zara Qadir Mahnaz Ayan Daisy Second Method: Zara Qadir Mahnaz Ayan Daisy
1.3獲取陣列的長度
獲取陣列長度的方法與獲取字串長度的方法相同,例如:
# 取得陣列元素的個數 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得陣列單個元素的長度 lengthn=${#array_name[n]}
2. 關聯陣列
shell 提供了另外一種陣列,其可以使用任意的字串作為下標(不必是整數)來訪問陣列元素。這種陣列叫做關聯陣列(associative array)。
關聯陣列的下標和值稱為鍵值對,它們是一一對應的關係。在關聯陣列中,鍵是唯一的,值可以不唯一。
shell 的關聯陣列和 perl 的關聯陣列在實現功能上是一樣的。在 perl 中,關聯陣列有時候稱為雜湊(hash)。
2.1 定義關聯陣列
shell 的關聯陣列和 shell 的下標陣列在定義和使用上完全一樣,只是在索引上有區別。
需要注意的是,在使用關聯陣列之前,需要使用命令 declare -A array 進行顯示宣告。
#!/bin/bash name=(jim tom lucy) declare -A phone phone=([jim]=135 [tom]=136 [lucy]=158) for i in `eval echo {0..$((${#name[*]}-1))}` do echo ${name[i]} phone number is ${phone["${name[i]}"]} done
在命令提示符下輸入 ./test.sh,執行結果如下:
jim phone number is 135
tom phone number is 136
lucy phone number is 158
2.2 關聯陣列的讀取和求長度和普通的陣列方法一樣