文字列を渡すときに$ @が機能しないのはなぜですか?

文字列を渡すときに$ @が機能しないのはなぜですか?

たとえば、次のスクリプトを使用します。

#!/bin/bash
for a in $@
do
   echo $a
done

実行:./script "x y" zリターン:

x
y
z

いいえ:

x y
z


なぜそんなことですか?
スペースを含む文字列引数をbashにどのように渡しますか?

私は使用しますBash 4.3.33

答え1

引用する$@

#!/bin/bash
for a in "$@"
do
  echo "$a"
done

出力:

XY

答え2

処理するときは、$@次のように単純化できます。

for a
do
   echo "$a"
done
「inwords...;」がない場合は「$@」と見なされます。

関連情報