~によるとこのページ、$ @、および$ *はほぼ同じことを行います。
The $@ holds list of all arguments passed to the script.
The $* holds list of all arguments passed to the script.
Googleで人気のあるクエリをすべて検索した後も、重複しているように見える2つのフレーズがある理由の説明が見つかりません。
私のスクリプトでも同じ目的で使用されているようです。
cat foo.sh
#!/bin/bash
echo The parameters passed in are $@
echo The parameters passed in are $*
./foo.sh herp derp
The parameters passed in are herp derp
The parameters passed in are herp derp
- 一方が他よりも好まれますか?
- 同じ機能を実行する組み込み変数が2つあるのはなぜですか?
その他のソース
bash.cyberciti.biz
ベストアンサー1
彼らは違う。 $*
単一の文字列$@
ですが、実際の配列です。違いを確認するには、次のスクリプトを次のように実行します。
> ./test.sh one two "three four"
スクリプト:
#!/bin/bash
echo "Using \"\$*\":"
for a in "$*"; do
echo $a;
done
echo -e "\nUsing \$*:"
for a in $*; do
echo $a;
done
echo -e "\nUsing \"\$@\":"
for a in "$@"; do
echo $a;
done
echo -e "\nUsing \$@:"
for a in $@; do
echo $a;
done
4つのケースの説明と結果は次のとおりです。
最初の場合、パラメータは長いパラメータとして扱われます。リーダーひも:
Using "$*":
one two three four
ケース2(引用符を除く) - 文字列はループ内の単語で区切られますfor
。
Using $*:
one
two
three
four
ケース3 - $ @の各要素を引用符付き文字列として扱います。
Using "$@":
one
two
three four
最後の場合 - 各要素は引用符なしで文字列として処理されるため、最後の要素は再分割されますfor three four
。
Using $@:
one
two
three
four