$ @ é uma das duas representações de "parâmetro posicional" no bash, sendo a outra $ *.
Ambos, $ @ e $ * são variáveis bash internas que representam todos os parâmetros passados para uma função ou um script, com uma diferença chave , $ @ tem cada parâmetro como uma string entre aspas separada, enquanto $ * tem todos os parâmetros como uma string única . Essa diferença é mostrada no código a seguir:
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
Saída:
Using $@
a
b
c
Using $*
a b c
Nota, quando chamado com $ *, exatamente um argumento é passado para foo (), mas com $ @ três argumentos são passados para foo ().
Mais informações: link