O que $@
significa como um parâmetro de função de script bash?
Exemplo:
function foo()
{
echo "$@" 1>&2;
}
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.
$ @ é 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
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
$1
,$2
etc, de qualquer maneira, independentemente de$@
.