Avec tous ces caractères spéciaux, comment faire pour passer des
arguments bizarres à une commande ? Par exemple, comment faire
afficher un point d'interrogation suivi d'une étoile et d'un dollar
par echo ? Le shell fournit des mécanismes pour ce faire. Ce
sont les quotations. Le plus simple est le backslash \.
Il suffit de précéder un caractère spécial d'un backslash, et le
shell remplace ces deux caractères par le caractère spécial seul.
Evidemment, le backslash est lui-même un caractère spécial.
Exemples:
poly% echo \*\$ ?*$ poly% echo \\ \\ \*\\ \$ \*\$
Un autre moyen est d'inclure une chaîne de caractères entre
apostrophes (simple quotes) '. Tout ce qui se trouve entre
deux apostrophes sera passé tel quel par le shell à la commande.
Exemple:
poly% echo '$?*\' $?*\
Enfin, on peut utiliser des guillemets (double quotes) ". Les
guillemets se comportent comme les apostrophes, à une exception
près: les dollars et les backslashes sont interprétés entre les
guillemets. Exemple:
poly% echo "$HOME/*" /users/cie5/foch/*
Une technique utile: Quand on juxtapose deux chaînes de caractères quotées, le shell les concatène, et elles ne forment qu'un argument. Exemple:
poly% echo "'"'"' '"
Quant aux interactions plus compliquées (backslashes à l'intérieur
des guillemets, guillemets à l'intérieur des apostrophes, etc.), le
meilleur moyen de savoir si ça donne bien le résultat attendu est
d'essayer. La commande echo est bien utile dans ce cas.
Dernière forme de quotation: `commande`. Le
shell exécute la commande, lit la sortie de la commande mot par
mot, et remplace `commande` par la liste de ces
mots. Exemple:
poly% echo `ls` Mail News bin foo g7 lib misc marne.aux marne.dvi marne.log marne.tex poly% ls -lg `which emacs` -rwxr-xr-x 1 root system 765952 Dec 17 1992 /usr/local/bin/emacs
La commande which cmd employée ci-dessus affiche sur sa
sortie le nom absolu du fichier exécuté par le shell quand on lance
la commande cmd.
poly% which emacs /usr/local/bin/emacs