[ 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[@]}"

posted @ 2023-06-17 18:04  YEUNGCHIE  阅读(706)  评论(0编辑  收藏  举报