bash コマンドライン引数 $@ と $* へのアクセス 質問する

bash コマンドライン引数 $@ と $* へのアクセス 質問する

多くの 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

おすすめ記事