【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="https://www.it610.com/article/valuex"
# 查找
echo ${mymap[$findkey]}
#查找插入和删除,找到就删掉,没找到就插入
if [ ! -n "${mymap[$key]}" ]
then
mymap[$findkey]=$value
else
echo "find value"
unset mymap[$findkey]
fi
推荐阅读
- Linux|Shell 编程~人入门到入坑。
- Linux技术|Windows平台下ADB的安装与使用
- c#|C#中使用SHFileOperation调用Windows的复制文件对话框
- Shell|Linux下 svn命令操作
- ubuntu环境|ubuntu10.04 常用命令
- ubuntu环境|Linux SSH相关命令
- python|合并和排序 Linux 上的文件 | Linux 中国
- 脚本输入处理——选项处理
- Shell|Shell脚本学习总结
- Shell|Linux: grep命令多关键字的“与”和“或”