web-dev-qa-db-ja.com

シェルスクリプトの$ @と$ *の違いは何ですか?

シェルスクリプトで、$@$*の違いは何ですか?

スクリプト引数を取得するために推奨される方法はどれですか。

これについて異なるシェルインタープリターの間に違いはありますか?

54
nicoulaj

ここ から:

$ @は$ *のように動作しますが、引用符で囲まれている場合、スペースが含まれていると引数が適切に分割されます。

たとえば、次のスクリプトを使用します(リンクされた回答から取得):

for var in "$@"
do
    echo "$var"
done

これを与える:

$ sh test.sh 1 2 '3 4'
1
2
3 4

"$@"から$*

for var in $*
do
    echo "$var"
done

そして、あなたはこれを手に入れます:

$ sh test.sh 1 2 '3 4'
1
2
3
4

Google を使用して回答が見つかりました)

61
Mark Byers

A key POVとの違いは、 "$ @"は元の引数の数を保持することです。 onlyの形式です。そのため、スクリプトで引数を渡すのに非常に便利です。

たとえば、ファイルmy_scriptに次のものが含まれているとします。

#!/bin/bash

main()
{
   echo 'MAIN sees ' $# ' args'
}

main $*
main $@

main "$*"
main "$@"

### end ###

そして私はそれを次のように実行します:

my_script 'a b c' d e

私はこの出力を取得します:

MAINは5つの引数を見ます

MAINは5つの引数を見ます

MAINは1つの引数を参照します

MAINは3つの引数を見ます

14
Art Swri

$ @では、各パラメーターは引用符付きの文字列です。それ以外は同じように動作します。

参照: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

1
Gavin H