Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在bash中搜索数组中一个键的关联数组值_Arrays_Bash_Dictionary_Associative Array - Fatal编程技术网

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使用数组也可以,您只需要决定如何保存单词。我举了充分的例子。