arrays - 在bash中搜索数组中一个键的关联数组值
问题描述
我有一个看起来像这样的关联数组,其中包含为用户输入声明的变量
NUMBER=$1
declare -A AD
AD[1]=aaaa
AD[2]=bbbb
AD[3]=cccc
AD[4]=dddd
AD[2]=eeee
AD[2]=ffff
AD[4]=gggg
如果我想获取用户输入数字并搜索该关联数组并显示值列表,例如
假设用户输入了 2,它应该在该数组中搜索并返回如下输出:如果这是完成此操作所必需的,我不确定如何使用搜索循环执行此操作。
bbbb
eeee
ffff
解决方案
每次你
AD[2]=something
您覆盖了之前的内容。似乎您希望条目(或仅此条目)是一个列表,这是不允许的,但您可以用字符串伪造它
AD[2]="bbbb eeee ffff"
如果要将条目作为数组返回,只需返回
(${AD[2]})
这当然只有在你的单词中没有空格的情况下才有效。如果你这样做,决定拆分令牌并使用(${AD[2]//;/ })
将起作用(;
作为令牌)。要使用这种基于字符串的方法,您必须按如下方式附加您的数组:
AD[2]+=" aaa"
Dd[2]+=" bbb"
AD[2]+=" ccc"
这样,如果你想一个一个地打印给定的“2”它们的话:
for word in ${AD[2]}; do
echo "$word"
done
同样,通过不引用,AD[2]
我允许 bash 用空格分隔单词。一种更安全的方法,使用约定的令牌可能是
AD[2]+=";aaa"
AD[2]+=";bbb"
AD[2]+=";ccc"
IFS=";" read -ra arr <<< "${AD[2]}"
for word in "${arr[@]}"; do
[ -z "$word" ] && continue # If I always use += to add to the array the first word is empty. Use AD[2]=aaa to avoid this rather than +=.
echo "$word"
done
推荐阅读
- php - PHP Laravel API - 如何限制对多个受信任主机的请求?
- scala - Scala yield 返回一个 Future
- python - Python 类 DRY
- javascript - d3 中的负对数和零对数值
- c - C#error 宏可以显示多行消息吗?
- angular - Angular 中的 Observable 返回 [ Object object ]
- python - 允许使用 Django 和 Meraki Captive Portal API 自动重定向浏览器
- node.js - Node.js 如何同时异步和单线程?
- android - 在播放其他声音时尝试限制其他声音
- chart.js - 如何在 y 轴上突出显示时间序列的最后一个值