shell的map简单的添加、查找、删除、遍历

想建立一个类似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
经验分享 程序员 微信小程序 职场和发展