6.8 Différence entre $* et $@
-
Dans un shell script,
$*
et $@
référencent tous les
arguments
- Exemple
homel% cat all1 homel% cat all2
#! /bin/sh #! /bin/sh
for i in $* for i in $@
do do
echo $i echo $i
done done
homel% all1 a b c homel% all2 a b c
a a
b b
c c
homel% all1 'a b' c homel% all2 'a b' c
a a
b b
c c
-
Les arguments sont réexaminés au moment de la boucle
- L'espace dans le premier argument crée deux arguments !
-
Protection par
"
des $*
et $@
homel% cat all3 homel% cat all4
#! /bin/sh #! /bin/sh
for i in "$*" for i in "$@"
do do
echo $i echo $i
done done
homel% all3 a b c homel% all4 a b c
a b c a
b
c
homel% all3 'a b' c homel% all4 'a b' c
a b c a b
c
Règles :
-
$@
º $*
: les arguments de la commande sont
réexaminés
"$*"
est un seul mot composé de tous les arguments
"$@"
fournit exactement les arguments