1. ホーム
  2. バッシュ

[解決済み】配列のループ処理でインデックスと値の両方が表示される。

2022-04-02 07:21:51

質問

このようなことをしたいのですが。

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")'

でも、もっと別のやり方はないのでしょうか?

どのように解決するのですか?

配列のキーは "${!foo[@]}" ( 参照 )ですから。

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

つまり、インデックスが $i 一方、要素そのものへのアクセスは ${foo[$i]}