在 bash 中的数组中搜索一个键的关联数组值

Search associate array values for one key in array in bash

我有一个类似这样的关联数组,其中包含一个为用户输入声明的变量

NUMBER=

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,它应该在那个数组中搜索并且 return 输出如下: 如果这是完成此操作所需的,我不确定如何使用搜索循环来做到这一点。

bbbb
eeee
ffff

每次你

AD[2]=something

您覆盖了之前存在的内容。似乎你希望条目(或只是这个条目)是一个列表,这是不允许的,但你可以用字符串伪造它

AD[2]="bbbb eeee ffff"

如果你想return条目作为一个数组,只需return

(${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