$*
シェルではどういう意味ですか?
2つの関数のコードがあり、run_command
次run_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