2012年1月22日日曜日

シェルの特殊変数 $* と $@ の違い

$* も $@ もシェルに渡されたすべての引数。
ただし、""ダブルクォーテーションでくくった際には、
$*はすべての引数を一つの文字列として展開し、
$@はすべての引数を個別の文字列として展開する。

exampleというスクリプトを次のように実行したとする。

$ ./example arg1 arg2 arg3

"$*" は "arg1 arg2 arg3"
"$@" は "arg1" "arg2" "arg3"
となる。

こちらのサイトが大変参考になりました。
『UNIX & Linux コマンド・シェルスクリプト リファレンス』http://shellscript.sunone.me/variable.html

どういう時に使い分けるのだろうかと疑問だったのだけど、
for文で
for i "$*"とすると、"arg1 arg2 arg3" とすべての引数がまとめてiに代入されるのに対し、
for i "$@"とすると、"arg1" "arg2" "arg3" と個別に代入されるのだそうです。