Co oznacza $ @ jako parametr funkcji skryptu bash

16

Co $@oznacza parametr funkcji skryptu bash?

Przykład:

function foo()
{
    echo "$@" 1>&2;
}
Dave
źródło

Odpowiedzi:

20

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 .

brm
źródło
11

$ @ 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

rubel
źródło
0

Oczekuję, że oznacza to, że weź jako skrót wszystkie parametry wejściowe. Jeśli więc są 3 parametry wejściowe, będą one dostępne w ramach funkcji w postaci 1 $, 2 $, 3 $

Dave
źródło
2
Nie, jest to zmienna wewnętrzna oznaczająca wszystkie parametry nadane funkcji. Są dostępne niezależnie od tego $1, jak $2itd $@.
terdon