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比较好。
赞赏微信赞赏
支付宝赞赏