¿Qué significa $ @ como parámetro de función de script bash?

16

¿Qué $@significa un parámetro de función de script bash?

Ejemplo:

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

Respuestas:

20

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.

brm
fuente
11

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

rublo
fuente
0

Espero que signifique tomar como hash todos los parámetros de entrada. Entonces, si hay 3 parámetros de entrada, estarán disponibles dentro de la función en forma de $ 1, $ 2, $ 3

Dave
fuente
2
No, es una variable interna que significa todos los parámetros dados a una función. Están disponibles como $1, $2etc. de todos modos, independientemente de $@.
terdon