bash的字典---关联数组
python
中存在一种叫做字典的数据类型,字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值
key:value
对用冒号 :
分割,每个键值对之间用逗号 ,
分割,整个字典包括在花括号
{}
中,
格式如下所示: 1
d = {key1 : value1, key2 : value2 }
关联数组的定义
在shell
中称为关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。关联数组使用
declare
命令来声明,语法格式如下: 1
declare -A array_name
-A
选项就是用于声明一个关联数组。关联数组的键是唯一的。以下实例我们创建一个关联数组
site
,并创建不同的键值: 1
declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")
我们也可以先声明一个关联数组,然后再设置键和值: 1
2
3
4declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"
关联数组的访问
访问关联数组元素可以使用指定的键,格式如下: 1
2
3
4
5
6declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"
echo ${site["runoob"]}
执行脚本,输出结果为: 1
www.runoob.com
对于一些不确定的大量数组,我们可以直接使用默认的编号
方式赋值或取出结果,然后可以用循环来处理每一条记录。但是对于某些数量有限,且有一些特意义的情况使用关联数组可以大大提高程序的可读性。例如,我们需要在系统中检测一下是否存在命令unar
,
如果不存在则安装程序,但是程序的名称却是unarchiver
,
因此可以定义一个关联数组解决: 1
2
3declare -A cmd
cmd["unar"]="unarchiver"
sudo pacman -S ${cmd["unar"]}
在不同的系统中存在不同的软件包管理器,此时可以通过定义关系数组来实现统一的管理脚本程序。
关联数组的特殊值
1 | declare -A site |
注意:上述echo
中的*
可以替换成@
,效果等价。