配列をループし、インデックスと値の両方を出力する 質問する

配列をループし、インデックスと値の両方を出力する 質問する

私は次のようなことをしたいのです:

foo=( )
foo[0]="bar"
foo[35]="baz"
for((i=0;i<${#foo[@]};i++))
do
    echo "$i: ${foo[$i]}"
done
# Output:
# 0: bar
# 1: 

次に、for in を使用してループしてみました:

foo=( )
foo[0]="bar"
foo[35]="baz"
for i in ${foo[@]}
do
    echo "?: $i"
done
# Output:
# ?: bar
# ?: naz

しかし、ここではインデックス値がわかりません。

こんなこともできると思います

foo=( )
foo[0]="bar"
foo[35]="baz"
declare -p foo
# Output:
# declare -a foo='([0]="bar" [35]="baz")'

しかし、別の方法ではできないのでしょうか?

ベストアンサー1

配列のキーは"${!foo[@]}"( reference ) で見つけられます。

for i in "${!foo[@]}"; do 
  printf "%s\t%s\n" "$i" "${foo[$i]}"
done

つまり、インデックスは含まれます$iが、要素自体は次のようにアクセスする必要があります。${foo[$i]}

おすすめ記事