如何在Bash中基于字符串直接查找array对应值(无需循环)
Bash 实现无需循环直接访问键值对的方法
你当前使用的是普通索引数组,Bash中普通数组仅支持数字索引,当你用${ARRAY["jack"]}时,字符串"jack"会被强制转换为数字0,因此取到了数组的第一个元素kevin:42,再通过#*:截取后得到42,这就是输出不符合预期的原因。
要实现无需循环直接通过键访问值的需求,Bash 4.0及以上版本支持关联数组(哈希表),这是最直接的解决方案:
#!/bin/bash # 声明关联数组(必须用declare -A) declare -A USER_AGES # 方式1:逐个给键赋值 USER_AGES["kevin"]=42 USER_AGES["jack"]=45 USER_AGES["tom"]=22 # 方式2:一次性初始化所有键值对 # USER_AGES=([kevin]=42 [jack]=45 [tom]=22) # 直接通过键获取对应值 echo printing jack value: ${USER_AGES["jack"]}
运行这段代码会直接输出:
printing jack value: 45
注意事项
- 必须确保你的Bash版本在4.0及以上,可通过
bash --version查看版本号;低版本Bash不支持关联数组特性。 - 关联数组的键可以是任意字符串,访问和赋值时都使用
数组名["键名"]的格式。
内容的提问来源于stack exchange,提问作者cosmos-1905-14
相关产品推荐
相关产品推荐

