シェルスクリプトに渡された引数を展開する、$* と $@ の動作の違いについて以下に記述します。
以下のサンプルスクリプトを使い、 $* と $@ の違いを説明します。
#!/bin/bash echo '== $* test ==' for arg in $* do echo $arg done echo '== "$*" test ==' for arg in "$*" do echo $arg done echo '== $@ test ==' for arg in $@ do echo $arg done echo '== "$@" test ==' for arg in "$@" do echo $arg done
以下の実行結果を見た結果のまとめ
$ ./arg.sh 1 2 3 == $* test == 1 2 3 == "$*" test == 1 2 3 == $@ test == 1 2 3 == "$@" test == 1 2 3
以下の実行結果を見た結果のまとめ
$ ./arg.sh "1 2 3" "a b c" == $* test == 1 2 3 a b c == "$*" test == 1 2 3 a b c == $@ test == 1 2 3 a b c == "$@" test == 1 2 3 a b c
以上、$*, $@ の違いでした。