一、数组
1. 数组的创建
1) arr=("value1" "value2" "value3")
2) ages=([3]=24 [5]=19 [10]=12)
第二种方式可以往指定下标赋值,与字典定义类似。注意,直接使用第二种方式,不能是字符串作为key,只能是数字
2. 数组的新增
1) ages+=43
数组的新增可以直接使用 ages+=43 的方式添加新元素43,其下标会自动填补最小下标
2) ages[2]=19
数组的新增可以指定下标添加元素,如果已有该下标,则覆盖
此外,数组元素的删除可以使用 unset ages[2] 的方式实现
3. 数组的拼接
arr_new=(${arr[*]} ${ages[*]}) #新数组
二、字典/关联数组
1. 字典的创建
shell脚本中定义字典必须事先声明变量,如你需要定义dic变量:declare -A dic。
个人觉得数组与字典(成系统的书本里称关联数组)差距不大,同样的遍历方式,但是如果不事先声明,那么遇到如下情况定义:
arr["a"]=1
arr["b"]=2
结果就是数组arr里面只有下标 为0 的值为2。
只有声明了之后,字符串下标才是有效的
b is 2
a is 1
2. 字典的定义
dic=([key1]="value1" [key2]="value2" [key3]="value3"),key可以是数字或字符串。
也可以用 dic[key]=value 的方式定义或添加键值对,如果键值对已经存在,会覆盖之前的值。
三、调用
#打印指定下标的值
echo ${dic[key]}
#打印所有key,对数组来说就是下标
echo ${!dic[*]}
#打印所有(key)下标
echo ${dic[*]}
四、遍历
字典和数组都可以这么用循环遍历,这里列举一种简单的
#遍历key值,数组的key就是下标
for key in $(echo ${!dic[*]})
do
echo "$key : ${dic[$key]}"
done
echo "shell定义数组"
五、总结
数组与字典的获取方式是一致的,然字典是无序的,也就是说,遍历字典得到的顺序与存储进去的顺序不一致,而数组则是按照下标排序。单独按照存储的值排序需要自定义函数。