bash中字典使用

bash版本号

1
2
bash --version
GNU bash, version 4.2.46(2)-release

bash中字典使用举例

字典声明赋值

与数组不同,字典使用前必须先声明

1
2
3
4
5
# Declare dict person 必须先声明
declare -A person

# 使用 () 赋值
person=([name]="john" [age]="18")

字典读取及遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
declare -A person
# 根据key读取字典内容
person=([name]="lucy" [age]="22")
echo ${person["name"]} # lucy

# 读取不存在的key时,返回为空
if [[ ${person["phone"]} =~ "" ]]; then echo "empty"; else echo "not empty"; fi # empty

# 打印字典中的所有value, 返回值为数组
echo ${person[@]} #lucy 22
echo ${person[@]:0:1} #lucy

# 打印字典中的所有key,返回值为数组
echo ${!person[@]} #name age

# 读取字典中键值对的数量
echo ${#person[@]} # 2

# for循环遍历字典
for key in ${!person[@]};do echo "key: ${key}, value: ${person[$key]}"; done
#key: name, value: lucy
#key: age, value: 22

字典中增加删除元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#增加字典元素两种方式
declare -A person
person=([name]="hanmeimei" [age]="23")
person+=([phoneNumber]="13920380998")
echo ${person[@]} # hanmeimei 23 13920380998
echo ${!person[@]} # name age phoneNumber

person[addr]="shanghai"
echo ${person[@]} #hanmeimei 23 shanghai 13920380998
echo ${!person[@]} #name age addr phoneNumber

#删除字典元素
unset person[phoneNumber]
echo ${person[@]} #hanmeimei 23 shanghai
echo ${!person[@]} #name age addr

#删除不存在的字典元素时无影响
unset person[phoneNumber]
echo ${person[@]} #hanmeimei 23 shanghai
echo ${!person[@]} #name age addr

#删除整个字典
unset person
if [[ ${person} =~ "" ]]; then echo "empty"; else echo "not empty"; fi #empty

字典元素值替换

1
2
3
4
5
declare -A person
person=([name]="lilei" [age]="12")
echo ${person[name]} #lilei
person[name]="lucy"
echo ${person[name]} #lucy