bash連想配列変数のすべての「インデックスID」(キー)をリストする方法はありますか?


26

私はこの配列を持っています:

declare -A astr

要素を追加します。

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

しかし、後でインデックスID(elemAおよびelemB)が何であるかを知り、それらをリストする必要があります。

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

回答:


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!
アクエリアスパワー

@AquariusPower-ええ、私の答えに編集をロールバックすると、元々数値インデックスも含まれていたことがわかりますが、名前付きハッシュが必要だったので削除しました。
slm

${!var[index]}動作しないことに注意してください、${!var[@]}またはのみ:${!var[*]}
i336_

@ i336_- !アウトしてください${var[index]}tldp.org/LDP/abs/html/arrays.html
slm

申し訳ありませんが、説明:数値インデックスnの連想キーを決定しようとしていました。私は簡単に行うことができます実現keys=(${!var[@]})当時と${keys[n]}私のインデックスを与え、が、私はまた、実現同時期に私は私のアプローチを再考する必要があります。
i336_
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.