$ @はbashスクリプト関数パラメーターとして何を意味しますか


16

$@bashスクリプト関数のパラメーターとはどういう意味ですか?

例:

function foo()
{
    echo "$@" 1>&2;
}

回答:


20

$@関数を呼び出すときに使用されるすべてのパラメータに変数が膨張するので、

function foo()
{
    echo "$@"
}

foo 1 2 3

表示されます1 2 3。関数内で使用されない場合、スクリプトを呼び出すときに使用されるすべてのパラメーターを指定します。詳細については、bashのマニュアルページ参照してください。


11

$ @は、bashの2つの「位置パラメータ」表現の1つで、もう1つは$ *です。

$ @と$ *は両方とも、関数またはスクリプトに渡されるすべてのパラメーターを表す内部bash変数です。1つの重要な違いは、$ @にはそれぞれのパラメーターが引用符で囲まれた文字列であるのに対し、$ *はすべてのパラメーターが単一の文字列であるということです。その違いは、次のコードに示されています。

foo() {
  while [ "$1" != "" ]; do
      echo $1
    shift
  done
}

dollar_at () {
    foo "$@"
}

dollar_star () {
    foo "$*"
}

echo "Using \$@"
dollar_at a b c

echo "Using \$*"
dollar_star a b c

出力:

Using $@
a
b
c
Using $*
a b c

$ *で呼び出された場合、foo()には1つの引数が渡されますが、$ @では3つの引数がfoo()に渡されます。

詳細:http : //tldp.org/LDP/abs/html/internalvariables.html#APPREF


0

すべての入力パラメーターをハッシュとして受け取ることを意味すると思います。したがって、3つの入力パラメーターがある場合、関数内で$ 1、$ 2、$ 3の形式で使用できます。


2
いいえ、それは関数に与えられるすべてのパラメーターを意味する内部変数です。とにかく、に関係なく$1$2などとして利用できます$@
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.