[ Shell ] 在 Bash 中如何使用“字典”
https://www.cnblogs.com/yeungchie/
定义
declare -A dict
赋值
批量赋值
dict=([a]=1 [b]=2 [c]=3)
追加赋值
dict[lib]=top
dict[cell]=XX1234
dict[view]=layout
取值
取值方式与数组一样。
echo "${dict[a]}"
# 1
echo "${dict[cell]}"
# XX1234
打印所有 key 和 value
echo ${!dict[*]}
# view a b c cell lib q w e
echo ${dict[*]}
# layout 1 2 3 XX1234 top 123
for k in ${!dict[*]}; do
echo "$k : ${dict[$k]}"
done | column -t -s ':' -o ':'
# view : layout
# a : 1
# b : 2
# c : 3
# cell : XX1234
# lib : top
特殊的 key
当 key 中有空格的时候需要注意一下用法。
dict[q w e]=123
追加一个 key 为 "q w e",这里加不加引号效果一样
可以正常取值:
echo ${dict[q w e]}
# 123
key="q w e"
echo ${dict[$key]}
# 123
遍历一下试试:
for k in ${!dict[*]}; do
echo "$k : ${dict[$k]}"
done | column -t -s ':' -o ':'
# view : layout
# a : 1
# b : 2
# c : 3
# cell : XX1234
# lib : top
# q :
# w :
# e :
这里无法区分 "q w e" 还是 "q", "w", "e"
修改一下 for
语句:
for k in "${!dict[@]}"; do
echo "$k : ${dict[$k]}"
done | column -t -s ':' -o ':'
# view : layout
# a : 1
# b : 2
# c : 3
# cell : XX1234
# lib : top
# q w e : 123
key 列表需要加上双引号,* 换成 @
${!dict[*]}
-->"${!dict[@]}"