Shell 對數組支持比較薄弱,僅支持一維的。下標從0開始,長度無限制,也支持關聯數組。在實際開發中基本用於配置項變量,本文詳細介紹使用方法。數組
#經常使用寫法 index=(1 2 "love" "Bai SuZhen") #也能夠逐個元素的定義 index[0]=1 index[1]='Bai SuZhen' #下標非連續的定義 index=(1 "love" [10]="you")
declare -A phone #必須這樣聲明,不然沒法使用 phone=([Jim]=130 [Tom]=150 [Lucy]=135) #也能逐個賦值 phone[Joy]=137 phone[man]=159 #phone=([jim]=130 150) #混合使用會報錯
語法 | 描述 |
${!array[*]} | 取關聯數組全部鍵 |
${!array[@]} | 取關聯數組全部鍵 |
${array[*]} | 取關聯數組全部值 |
${array[@]} | 取關聯數組全部值 |
${#array[*]} | 關聯數組的長度 |
${#array[@]} | 關聯數組的長度 |
declare -A phone=([jim]=135 [tom]=136 [lucy]=158) for tel in ${phone[*]}; do echo $tel done for key in ${!phone[*]} do echo "$key -> ${phone[$key]}" done
city=(Nanjing Atlanta Massachusetts MaseillesMas) #${#city[*]} 獲取長度,跟字符串操做相似 echo "數組city有${#city[@]}個元素,第2個是${city[1]}"
city=(Nanjing Atlanta Massachusetts MaseillesMas) city[${#city[*]}]="BeiJing" echo ${city[*]:3} # ${city[*]:start:length} 從開始位置,取length 個 echo "取city的第2到4個元素爲 ${city[*]:1:2 }"
city=(Nanjing Atlanta Massachusetts MaseillesMas) #對每一個元素按字符串操做過濾 echo ${city[*]#M*a} #最短搜索,只匹配一次。 Nanjing Atlanta ssachusetts seillesMas echo ${city[*]##M*a} #最長匹配,直到過濾全部。 Nanjing Atlanta chusetts s
city=(Nanjing Atlanta Massachusetts MaseillesMas) # /表示只替換一次,//替換全部 echo ${city[*]/M*s/5} # 按最長的匹配 Nanjing Atlanta 5 5 echo ${city[*]/Mas/5} #每一個元素只替換一次 Nanjing Atlanta 5sachusetts 5eillesMas echo ${city[*]//Mas/5 #每一個元素替換全部 Nanjing Atlanta 5sachusetts 5eilles5
#合併後均變成索引數組且下標從0開始 declare -A city=([BeiJing]=1 [ShangHa]=2) declare -A person=([5]=Wu [vip]=Me) combine=(${city[@]} ${person[@]}) for key in "${!combine[@]}"; do echo "$key->${combine[$key]}" done