next up previous contents index
Next: Redirections et filtres Up: Approfondissement Previous: Le chemin d'accès

Quotation

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



Wed Jun 25 13:24:35 MET DST 1997