Shell關聯陣列

2020-07-16 10:04:46
現在最新的 Bash Shell 已經支援關聯陣列了。關聯陣列使用字串作為下標,而不是整數,這樣可以做到見名知意。

關聯陣列也稱為“鍵值對(key-value)”陣列,鍵(key)也即字串形式的陣列下標,值(value)也即元素值。

例如,我們可以建立一個叫做 color 的關聯陣列,並用顏色名字作為下標。
declare -A color
color["red"]="#ff0000"
color["green"]="#00ff00"
color["blue"]="#0000ff"
也可以在定義的同時賦值:
declare -A color=(["red"]="#ff0000", ["green"]="#00ff00", ["blue"]="#0000ff")
不同於普通陣列,關聯陣列必須使用帶有-A選項的 declare 命令建立。關於 declare 命令的詳細用法請存取:Shell declare和typeset命令:設定變數屬性

存取關聯陣列元素

存取關聯陣列元素的方式幾乎與普通陣列相同,具體形式為:

array_name["index"]

例如:
color["white"]="#ffffff"
color["black"]="#000000"

加上$()即可獲取陣列元素的值:

$(array_name["index"])

例如:
echo $(color["white"])
white=$(color["black"])

獲取所有元素的下標和值

使用下面的形式可以獲得關聯陣列的所有元素值:

${array_name[@]}
${array_name[*]}

使用下面的形式可以獲取關聯陣列的所有下標值:

${!array_name[@]}
${!array_name[*]}

獲取關聯陣列長度

使用下面的形式可以獲得關聯陣列的長度:

${#array_name[*]}
${#array_name[@]}


關聯陣列範例演示:
#!/bin/bash

declare -A color
color["red"]="#ff0000"
color["green"]="#00ff00"
color["blue"]="#0000ff"
color["white"]="#ffffff"
color["black"]="#000000"

#獲取所有元素值
for value in ${color[*]}
do
    echo $value
done
echo "****************"

#獲取所有元素下標(鍵)
for key in ${!color[*]}
do
    echo $key
done
echo "****************"

#列出所有鍵值對
for key in ${!color[@]}
do
    echo "${key} -> ${color[$key]}"
done
執行結果:
#ff0000
#0000ff
#ffffff
#000000
#00ff00
****************
red
blue
white
black
green
****************
red -> #ff0000
blue -> #0000ff
white -> #ffffff
black -> #000000
green -> #00ff00