多くの SO の質問や bash チュートリアルでは、bash スクリプトのコマンド ライン引数に 2 つの方法でアクセスできることがわかります。
$ ~ >cat testargs.sh
#!/bin/bash
echo "you passed me" $*
echo "you passed me" $@
その結果は次のようになります:
$ ~> bash testargs.sh arg1 arg2
you passed me arg1 arg2
you passed me arg1 arg2
$*
との違いは何ですか$@
?
前者はいつ使用し、後者はいつ使用すればよいですか?
ベストアンサー1
違いは、特別なパラメータが引用されているときに現れます。違いを説明しましょう。
$ set -- "arg 1" "arg 2" "arg 3"
$ for word in $*; do echo "$word"; done
arg
1
arg
2
arg
3
$ for word in $@; do echo "$word"; done
arg
1
arg
2
arg
3
$ for word in "$*"; do echo "$word"; done
arg 1 arg 2 arg 3
$ for word in "$@"; do echo "$word"; done
arg 1
arg 2
arg 3
引用符の重要性に関するもう 1 つの例: 「arg」と数字の間には 2 つのスペースがありますが、$word を引用符で囲まない場合は次のようになります。
$ for word in "$@"; do echo $word; done
arg 1
arg 2
arg 3
bash では、"$@"
反復処理する「デフォルト」リストは次のようになります。
$ for word; do echo "$word"; done
arg 1
arg 2
arg 3