O que $ @ significa como um parâmetro de função de script bash

16

O que $@significa como um parâmetro de função de script bash?

Exemplo:

function foo()
{
    echo "$@" 1>&2;
}
Dave
fonte

Respostas:

20

A $@variável se expande para todos os parâmetros usados ​​ao chamar a função, portanto

function foo()
{
    echo "$@"
}

foo 1 2 3

seria exibido 1 2 3. Se não for usado dentro de uma função, ele especificará todos os parâmetros usados ​​ao chamar o script. Veja a página do manual do bash para mais informações.

brm
fonte
11

$ @ é uma das duas representações de "parâmetro posicional" no bash, a outra sendo $ *.

Ambos, $ @ e $ * são variáveis ​​internas do bash que representam todos os parâmetros passados ​​para uma função ou script, com uma diferença de chave : $ @ tem cada parâmetro como uma string entre aspas separada, enquanto $ * tem todos os parâmetros como uma única string. Essa diferença é mostrada no seguinte código:

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

Resultado:

Using $@
a
b
c
Using $*
a b c

Observe que, quando chamado com $ *, exatamente um argumento é passado para foo (), mas com $ @ três argumentos são passados ​​para foo ().

Mais informações: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

rublo
fonte
0

Espero que isso signifique tomar como hash todos os parâmetros de entrada. Portanto, se houver três parâmetros de entrada, eles estarão disponíveis na função na forma de $ 1, $ 2, $ 3

Dave
fonte
2
Não, é uma variável interna que significa todos os parâmetros dados a uma função. Eles estão disponíveis como $1, $2etc, de qualquer maneira, independentemente de $@.
terdon