shell中map的使用

bash 4.1.2 版本增加了map数据结构。map是一种常用的数据结构,通过map可以将key映射到一个value。

使用方法

map在使用之前需要先声明,声明的方式如下

declare -A map_name

map需要先声明再使用。参数-A表示声明的变量是一个map。需要注意的是这里的A是大写的字母A。

赋值操作

map的赋值有两种方式,一种是直接给map赋值,如下:

map_name=(["foo"]="bar" ["hello"]="world")

另一种是使用下标给map添加key-value对

map_name["foo"]="bar"
map_name["hello"]="world"

输出所有的key

echo ${!map_name[@]}

在文中最开始提到map的使用需要先声明,在没有声明的情况下此处会输出一个0,如下图:

输出所有value

echo ${map_name[@]}

输出map长度

echo ${#map_name[@]}

遍历,根据key找到对应的value

for key in ${!map_name[*]};do
    echo ${map_name[$key]}
done

遍历所有的key

for key in ${!map_name[@]};do
    echo $key
done

遍历所有的value

for val in ${map_name[@]};do
    echo $val
done

问题FAQ

Q:为什么提示 declare: -A: invalid option

A:bash 4.1.2版本之后才提供map数据结构,你的bash版本可能较低,升级即可。

建议

shell中的map功能十分弱,不同版本表现还不太一致。我曾想用map实现一些功能,但实在难用不得不放弃。感觉shell中比较好的方式还是用 KEY_NAME 这种通过变量名的方式来代替map比较好。

赞赏

微信赞赏支付宝赞赏

发表评论

您的电子邮箱地址不会被公开。