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

本文介绍如何在Shell脚本中创建类似Map的数据结构,通过使用declare -A命令定义关联数组,并利用eval和awk进行赋值操作,实现了从文本文件读取key-value对并存储在Map中,最后展示了如何遍历、输出所有key和value,以及如何查找和删除Map元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想建立一个类似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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值