Que signifie $ @ en tant que paramètre de fonction de script bash

16

Que $@signifie un paramètre de fonction de script bash?

Exemple:

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

Réponses:

20

La $@variable s'étend à tous les paramètres utilisés lors de l'appel de la fonction, donc

function foo()
{
    echo "$@"
}

foo 1 2 3

afficherait 1 2 3. S'il n'est pas utilisé dans une fonction, il spécifie tous les paramètres utilisés lors de l'appel du script. Voir la page de manuel de bash pour plus d'informations.

brm
la source
11

$ @ est l'une des deux représentations de "paramètre positionnel" en bash, l'autre étant $ *.

$ @ Et $ * sont des variables bash internes qui représentent tous les paramètres passés dans une fonction ou un script, avec une différence clé , $ @ a chaque paramètre comme une chaîne séparée entre guillemets, tandis que $ * a tous les paramètres comme une seule chaîne. Cette différence est indiquée dans le code suivant:

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

Production:

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

Notez que lorsqu'il est appelé avec $ *, exactement un argument est passé à foo (), mais avec $ @ trois arguments sont passés à foo ().

Plus d'informations: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

rouble
la source
0

Je suppose que cela signifie prendre comme hachage tous les paramètres d'entrée. Donc, s'il y a 3 paramètres d'entrée, ils seront disponibles dans la fonction sous la forme de $ 1, $ 2, $ 3

Dave
la source
2
Non, c'est une variable interne signifiant tous les paramètres donnés à une fonction. Ils sont disponibles en tant que $1, $2etc de toute façon, indépendamment de $@.
terdon