Bash配列の値を参照するときの[@]と[*]の違いは何ですか?

Bash配列の値を参照するときの[@]と[*]の違いは何ですか?

このバッシュガイド説明する:

インデックス番号がある場合、@または*配列のすべてのメンバーが参照されます。

私がこれを行うとき:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
  echo "example.$i"
done

希望の結果を提供します。

example.1
example.2
example.3

しかし${LIST[*]}

example.1 2 3

代わりに。

なぜ?

編集:これは実際に使用するprintfと同じ結果を提供します。@*

ベストアンサー1

違いは微妙です。"${LIST[*]}"(like "$*")は単一の引数を生成し、"${LIST[@]}"(like "$@")は各項目を別々の引数に拡張します。

LIST=(1 2 3)
for i in "${LIST[@]}"; do
    echo "example.$i"
done

リストを複数の変数として処理します(印刷)。

しかし:

LIST=(1 2 3)
for i in "${LIST[*]}"; do
    echo "example.$i"
done

リストは変数として扱われます。

おすすめ記事