bashシェルスクリプトで配列インデックス変数を繰り返しますか?

bashシェルスクリプトで配列インデックス変数を繰り返しますか?

Bashシェルスクリプトで配列を繰り返しながら、配列インデックス変数にアクセスしたいと思います。

myscript.sh
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
  echo $i
done

上記のスクリプトの結果は次のとおりです。

foo
bar
baz
bat

私が探している結果は次のとおりです。

0
1
2
3

これを達成するためにスクリプトをどのように変更できますか?

ベストアンサー1

以下を使用してこれを実行できます。配列キーのリストbashマニュアルページから:

${!name[@]}
${!name[*]}

配列キーのリスト。 nameが配列変数の場合、nameに割り当てられた配列インデックス(キー)のリストに展開されます。 name が配列でない場合は、0name が設定されている場合は null に展開され、それ以外の場合は null に展開されます。使用して二重引用符内に拡張が発生すると、@各キーは別々の単語に展開されます。

あなたの例:

#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
  printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done

その結果は次のとおりです。

${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat

これは非連続インデックスにも当てはまります。

#!/bin/bash
AR=([3]='foo' [5]='bar' [25]='baz' [7]='bat')
for i in "${!AR[@]}"; do
  printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done

その結果は次のとおりです。

${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz

おすすめ記事