>Entre le moment où vous validez une commande et celui où cette commande est exécutée, le shell est capable de réaliser diverses substitutions : remplacer certains caractères jokers par les noms de fichiers correspondants, ou encore remplacer le texte d'une sous-commande par sa sortie standard.
>
>Il existe trois types de caractères jokers :
>
>`?
' représente un caractère quelconque et un seul : `a?c
' est un motif qui pourrait correspondre aux fichiers `abc
', `a.c
' et `a2c
', mais qui ne correspondrait pas aux fichiers `ac
', `a12c
' ou `alinka.c
' ;
>
>`*
' représente une suite quelconque de caractères, de longueur nulle ou non : le motif `a*c
' pourrait correspondre aux fichiers `abc
', `ac
' et `alinka.c
', bref, à tout fichier dont le nom débuterait par le caractère `a
' et finirait par le caractère `c
' ;
>
>les délimiteurs `[]
' représentent l'un quelconque des caractères qu'ils contiennent : `[abc]
' correspond ainsi au caractère `a
' ou au caractère `b
' ou au caractère `c
'. Le trait d'union `-
' permet de spécifier une plage entière de caractères : `[a-m]
' représente l'un des caractères compris entre `a
' et `m
' (les caractères `a
', `b
', `c
', ..., `l
', `m
'). Enfin, lorsque le premier caractère de la liste est `!
' ou `^
', la signification des crochets est inversée : `[!a-m]
' représente ainsi l'un quelconque des caractères NON compris entre `a
' et `m
'.
>
>
>Vous pouvez suivre la session suivante, qui utilise de façon intensive les caractères jokers, pour vous assurer qu'ils n'ont désormais plus de secrets pour vous :-)
>
>
% ls
lp lp12 lp2 lp42
% ls *
lp lp12 lp2 lp42
% ls *2
lp12 lp2 lp42
% ls lp[14]2
lp12 lp42
% ls ?p
lp
% ls /tmp
tata titi toto
% ls /tmp/t?t?
/tmp/tata /tmp/titi /tmp/toto
% ls /tmp/ti*
/tmp/titi
% ls /tmp/t?t[ao]
/tmp/tata /tmp/toto
% ls /tmp/t?t[!i]
/tmp/tata /tmp/toto
>
>
>Lorsque vous exécutez une commande, il vous est possible d'indiquer au shell d'exécuter dans un premier temps certaines sous-commandes et de les remplacer, dans le texte de votre commande, par leur sortie standard. Ce n'est qu'une fois cette substitution effectuée que le shell exécute votre commande : vous pouvez ainsi utiliser la sortie standard d'une commande comme argument d'une autre commande.
>
>Vous souhaitez afficher un message indiquant le nombre d'utilisateurs actuellement connectés à votre système... la commande `who
' liste l'ensemble des utilisateurs connectés, et `wc -l
' permet de compter un nombre de lignes : `who | wc -l
' vous indique donc le nombre d'utilisateurs connectés. Il ne vous reste plus qu'à utiliser la commande `echo
', qui ne fait qu'afficher les arguments qui lui sont passés, et la substitution de commande, grâce aux délimiteurs ```
' ou `$()
' :
>
>
% echo "Nombre d'utilisateurs connectés : `who | wc -l`"
Nombre d'utilisateurs connectés : 12
% echo "Nombre d'utilisateurs connectés : $(who | wc -l)"
Nombre d'utilisateurs connectés : 12
>
>