Shell--數組的使用

1 概述    

    Shell 對數組支持比較薄弱,僅支持一維的。下標從0開始,長度無限制,也支持關聯數組。在實際開發中基本用於配置項變量,本文詳細介紹使用方法。數組

2 定義

2.1 索引數組

#經常使用寫法
index=(1 2 "love" "Bai SuZhen") 

#也能夠逐個元素的定義
index[0]=1
index[1]='Bai SuZhen'

#下標非連續的定義
index=(1 "love" [10]="you")

2.2 關聯數組

declare -A phone #必須這樣聲明,不然沒法使用
phone=([Jim]=130 [Tom]=150 [Lucy]=135)
#也能逐個賦值
phone[Joy]=137
phone[man]=159
#phone=([jim]=130 150) #混合使用會報錯

3 遍歷

 語法  描述
 ${!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

4 經常使用操做

4.1 獲取數組長度

city=(Nanjing Atlanta Massachusetts MaseillesMas)
#${#city[*]} 獲取長度,跟字符串操做相似
echo "數組city有${#city[@]}個元素,第2個是${city[1]}"

4.2 數組截取

city=(Nanjing Atlanta Massachusetts MaseillesMas)
city[${#city[*]}]="BeiJing"
echo ${city[*]:3}
# ${city[*]:start:length} 從開始位置,取length 個
echo "取city的第2到4個元素爲 ${city[*]:1:2 }"

4.3 元素字串刪除

city=(Nanjing Atlanta Massachusetts MaseillesMas)
#對每一個元素按字符串操做過濾
echo ${city[*]#M*a} #最短搜索,只匹配一次。     Nanjing Atlanta ssachusetts seillesMas
echo ${city[*]##M*a} #最長匹配,直到過濾全部。  Nanjing Atlanta chusetts s

4.4 元素字串替換

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

4.5 數組合並

#合併後均變成索引數組且下標從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
相關文章
相關標籤/搜索