Odpowiedzi:
W $@
rozszerza się na wszystkie zmienne parametry wykorzystywane przy wywołaniu funkcji, tak
function foo()
{
echo "$@"
}
foo 1 2 3
wyświetli się 1 2 3
. Jeśli nie jest używany wewnątrz funkcji, określa wszystkie parametry używane podczas wywoływania skryptu. Aby uzyskać więcej informacji, zobacz stronę podręcznika użytkownika bash .
$ @ to jedna z dwóch reprezentacji „parametru pozycyjnego” w bash, druga to $ *.
Zarówno $ @, jak i * są wewnętrznymi zmiennymi bash, które reprezentują wszystkie parametry przekazane do funkcji lub skryptu, z jedną kluczową różnicą , $ @ ma każdy parametr jako osobny ciąg cytowany, podczas gdy $ * ma wszystkie parametry jako pojedynczy ciąg. Ta różnica jest pokazana w następującym kodzie:
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
Wynik:
Using $@
a
b
c
Using $*
a b c
Uwaga: wywołanie za pomocą $ * powoduje przekazanie dokładnie jednego argumentu do foo (), ale za pomocą $ @ trzy argumenty są przekazywane do foo ().
Więcej informacji: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
$1
, jak$2
itd$@
.