在 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
我有一个类似这样的关联数组,其中包含一个为用户输入声明的变量
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