首页 > 解决方案 > 在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

标签: arraysbashdictionaryassociative-array

解决方案


每次你

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

推荐阅读