Utilisation de $* et de $@

Les variables $* et $@ contiennent la liste des arguments d'un script shell.
Lorsqu'elles ne sont pas entourées par des guillemets, elles sont équivalentes.

Exemple :

$ nl scr01.sh
     1  #!/bin/bash
     2  cpt=1
     3  echo "Utilisation de la variable \$*"
     4  for arg in $*
     5  do
     6          echo "Argument $cpt : $arg"
     7          ((cpt+=1))
     8  done
     9  cpt=1
    10  echo "Utilisation de la variable \$@"
    11  for arg in $@
    12  do
    13          echo "Argument $cpt : $arg"
    14          ((cpt+=1))
    15  done
    16  exit 0
$ ./scr01.sh a b "c d e" f
Utilisation de la variable $*
Argument 1 : a
Argument 2 : b
Argument 3 : c
Argument 4 : d
Argument 5 : e
Argument 6 : f
Utilisation de la variable $@
Argument 1 : a
Argument 2 : b
Argument 3 : c
Argument 4 : d
Argument 5 : e
Argument 6 : f
$

Interprétation :

  1. $* et $@ contiennent exactement la même liste d'arguments.
  2. Les guillemets protégeant les arguments ne sont pas pris en compte
  3. Ce sont les espaces qui délimitent les arguments

Commentaires

Bonjour Ronan,

Pour être plus précis, et complet, il me semble intéressant d'ajouter que si on met les variables $* et $@ entre guillemets, alors leur comportement n'est plus le même, et les guillemets protégeant les arguments sont pris en compte (du moins pour "$@", pas pour "$*").

$ nl ./scr01.sh
1 #!/bin/bash
2 cpt=1
3 echo "Utilisation de la variable \$*"
4 for arg in $* ; do
5 echo "Argument $cpt : $arg"
6 ((cpt+=1))
7 done
8 cpt=1
9 echo "Utilisation de la variable \$@"
10 for arg in $@ ; do
11 echo "Argument $cpt : $arg"
12 ((cpt+=1))
13 done
14 cpt=1
15 echo "Utilisation de la variable \"\$*\""
16 for arg in "$*" ; do
17 echo "Argument $cpt : $arg"
18 ((cpt+=1))
19 done
20 cpt=1
21 echo "Utilisation de la variable \"\$@\""
22 for arg in "$@" ; do
23 echo "Argument $cpt : $arg"
24 ((cpt+=1))
25 done

$ ./scr01.sh a b "c d e" f
Utilisation de la variable $*
Argument 1 : a
Argument 2 : b
Argument 3 : c
Argument 4 : d
Argument 5 : e
Argument 6 : f
Utilisation de la variable $@
Argument 1 : a
Argument 2 : b
Argument 3 : c
Argument 4 : d
Argument 5 : e
Argument 6 : f
Utilisation de la variable "$*"
Argument 1 : a b c d e f
Utilisation de la variable "$@"
Argument 1 : a
Argument 2 : b
Argument 3 : c d e
Argument 4 : f

Cordialement,

Marc

Tout à fait et c'est justement ce que j'explique sur les deux pages suivantes.

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.