Arrays 在bash中搜索数组中一个键的关联数组值
我有一个类似这样的关联数组,其中有一个为用户输入声明的变量Arrays 在bash中搜索数组中一个键的关联数组值,arrays,bash,dictionary,associative-array,Arrays,Bash,Dictionary,Associative Array,我有一个类似这样的关联数组,其中有一个为用户输入声明的变量 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 每
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
AD[2]+=“aaa”
广告[2]+=“bbb”
AD[2]+=“ccc”
IFS=“;”read-ra arr感谢@Kabanus的回复,好吧,如果符合条件,我想明确列出该列表中的每个重复值。如果关联数组不允许这样做,我也可以使用另一种方法。@RajanVashisht使用数组也可以,您只需要决定如何保存单词。我举了充分的例子。