$*はシェルで何を意味しますか?

$*はシェルで何を意味しますか?

$*シェルではどういう意味ですか?

2つの関数のコードがあり、run_commandrun_testのように呼び出されます。

if [ -n "`echo ${GOAT_COMMANDS} | grep $1`" ]; then
  run_command $*
else
  run_test $*
fi

これが何を意味するのかを理解したいのですが、$*Googleはこの種の検索を正しく実行しません。

ベストアンサー1

$*はいすべてのパラメータスクリプトまたは関数の場合は、引数をスペースで区切ります。

機能がある場合:

foo() {
    for x in $*
    do
        echo $x
    done
}

その後、実行すると以下foo 1 "2 3 4" 5が出力されます。

1
2
3
4
5

つまり、引用符付き文字列は"2 3 4"3つの別々の「単語」に分割されます。

いいえ引数を別の単語に分割するには、を使用できます。代わりに$@同じ関数を使用すると、次のものが出力されます。"$@"$*

1
2 3 4
5

つまり、引用符付き文字列は別の単語に分割されません。これは、すべての位置パラメータを明示的に一覧表示するのと同じです"$1" "$2" "$3" "$4" ...。通常、これはおそらくあなたが使用したいものです。単語の分割は、しばしば追跡するのが難しい不快なエラーにつながります。

関数の内部ではなく、スクリプトの最上位レベルでは、これはスクリプト自体に与えられた引数を参照します。

run_commandあなたの例では、一部またはrun_testすべての引数を使用してこのスクリプトまたは関数を呼び出し、それを別の単語に分割します。スクリプトがscript.sh "hello world" 2 3次のように実行されると、次の効果が表示されます。

run_command hello world 2 3

おすすめ記事