想建立一个类似map的key——value集合
搜了下shell有没有map,倒是搜到了declare -A mymap,需要sh版本支持(>=version 4.1.2),定义、添加、取值、遍历
这里用到eval,不然我不知道怎么用awk给map赋值,之所以写成边处理字符串或者文本边赋值是考虑到实际使用的时候,在处理的过程中需要把处理得到的key和value赋值给map,而不是写个for循环map[key]=value,那只能做已知的循环遍历处理,我的需求只是处理些不是特别大的测试用的配置文本,不然就用python来写了
测试待处理key-value文本
vim test.txt
key1:value1
key2:value2
key3:value3
key4:value4
key5:value5
#!/bin/bash
str=(`cat ./test.txt | awk -F ' ' '{print $1}'`)
declare -A mymap; #定义
for i in ${!str[@]}
do
#赋值
eval $(echo ${str[i]} | awk '{split($0, filearray, ":");print "mymap["filearray[1]"]="filearray[2]}')
done
#输出所有key值
echo ${!mymap[@]}
#输出所有value值
echo ${mymap[@]}
#遍历
for key in ${!mymap[@]}
do
echo "${mymap[$key]}"
done
#查找和删除
findkey="keyx"
value="valuex"
# 查找
echo ${mymap[$findkey]}
#查找插入和删除,找到就删掉,没找到就插入
if [ ! -n "${mymap[$key]}" ]
then
mymap[$findkey]=$value
else
echo "find value"
unset mymap[$findkey]
fi