Respuestas:
La $@
variable se expande a todos los parámetros utilizados al llamar a la función, por lo que
function foo()
{
echo "$@"
}
foo 1 2 3
mostraría 1 2 3
. Si no se utiliza dentro de una función, especifica todos los parámetros utilizados al llamar al script. Consulte la página del manual de bash para obtener más información.
$ @ es una de las dos representaciones de "parámetros posicionales" en bash, el otro es $ *.
Ambos, $ @ y $ * son variables bash internas que representan todos los parámetros pasados a una función o un script, con una diferencia clave , $ @ tiene cada parámetro como una cadena separada entre comillas, mientras que $ * tiene todos los parámetros como una sola cadena. Esa diferencia se muestra en el siguiente 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
Salida:
Using $@
a
b
c
Using $*
a b c
Tenga en cuenta que cuando se llama con $ *, se pasa exactamente un argumento a foo (), pero con $ @ tres argumentos se pasan a foo ().
Más información: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
$1
,$2
etc. de todos modos, independientemente de$@
.