有没有办法列出bash关联数组变量上的所有“索引ID”(键)?


26

我有这个数组:

declare -A astr

我向其中添加元素:

astr[elemA]=123
astr[elemB]=199

但是稍后,我需要知道什么是索引ID(elemA和elemB)并列出它们。

echo "${astr[@]}" #this only get me the values...

Answers:


35

您可以像这样获得关联数组的“键”列表:

$ echo "${!astr[@]}"
elemB elemA

您可以像这样遍历“键”:

for i in "${!astr[@]}"
do   
  echo "key  : $i"
  echo "value: ${astr[$i]}"
done

$ for i in "${!astr[@]}"; do echo "key  : $i"; echo "value: ${astr[$i]}"; done
key  : elemB
value: 199
key  : elemA
value: 123

参考文献


1
我刚刚发现它也适用于数字索引数组:astr2=(a b c d e);echo ${!astr2[@]};unset astr2[2];echo ${!astr2[@]}thx!
Aquarius Power

@AquariusPower-是的,如果您将编辑回滚到我的答案上,您会看到我最初也包含数字索引,但是由于您想要命名哈希而将其删除。
slm

请注意,${!var[index]}没有工作,只有${!var[@]}${!var[*]}做:(
i336_

@ i336_- !出去吧${var[index]}tldp.org/LDP/abs/html/arrays.html
slm

抱歉,澄清:我正在尝试确定数字索引n的关联键。我意识到自己可以轻松做到keys=(${!var[@]}),然后${keys[n]}为我提供索引,但与此同时,我也意识到我需要重新考虑自己的方法。
i336_
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.