IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La programmation «Shell»

La programmation «Shell»


précédentsommairesuivant

VII. Neutralisation des métacaractères

Certains caractères alphanumériques du Shell ont une signification particulière.

Exemple

Essayer de faire afficher tel quel à l'écran le texte encadré ci‑dessous :

 
Sélectionnez
* (une étoile) 
Il a crié "assez"; mais cela ne suffisait pas 
L'habit à $100 ne fait pas le moine 
A > 0 <=> A + B > B

Les problèmes rencontrés pour afficher ces quelques lignes proviennent des caractères étoile, parenthèse ouvrante, parenthèse fermante, guillemet, point‑virgule, dollar, apostrophe, backslash, inférieur et supérieur qui ont une signification spéciale en Shell. On les appelle « métacaractères » (méta en grec signifie « transformer ») parce que le Shell les transforme avant de les traiter. Afin de les utiliser tels quels par le langage, on est obligé d'y appliquer un « mécanisme de neutralisation de transformation ». C'est-à-dire qu'il faut demander au Shell de ne pas les transformer en autre chose que ce qu'ils sont.

VII-A. Rappel sur les métacaractères

Les métacaractères suivants sont utilisés lorsque l'on désire référencer un fichier sans connaître exactement son nom :

métacaractère Signification
* Toute chaîne de caractère, même une chaîne vide
? Un caractère quelconque, mais présent
[xyz] Tout caractère correspondant à l'un de ceux contenus dans les crochets
[x-y] Tout caractère compris entre « x » et « y »
[!x-y] Tout caractère qui n'est pas compris entre « x » et « y »

Les métacaractères suivants sont utilisés dans le Shell :

métacaractère Signification
$ Contenu d'une variable
" " Neutralisation de certains métacaractères placés à l'intérieur
' ' Neutralisation de tous les métacaractères placés à l'intérieur
\ Neutralisation de tout métacaractère placé après
( ) Groupement de commandes
; Séparateur de commande (permet d'en placer plusieurs sur une ligne)
< Redirection en entrée à partir d'un fichier
<< Redirection en entrée à partir des lignes suivantes
> Redirection en sortie vers un fichier
>> Redirection en sortie vers un fichier en mode « ajout »
| Redirection vers une commande (pipe mémoire)

VII-B. Le « backslash »

Le métacaractère « backslash » a pour effet de neutraliser tout métacaractère qui le suit, quel qu'il soit. Mais il n'en neutralise qu'un seul.

Exemple

Solution avec le métacaractère « backslash » :

 
Sélectionnez
Prompt> echo \* \(une étoile\) 
Prompt> echo Il a crié \"assez\"\; mais cela ne suffisait pas 
Prompt> echo L\'habit à \$100 ne fait pas le moine 
Prompt> echo A et B \> 0 \<=\> A + B \> B

VII-C. L'apostrophe ou « quote simple »

Le métacaractère « apostrophe » appelé aussi « quote simple » a pour effet de neutraliser tous les métacaractères situés après, sauf lui‑même. Cette exception permet ainsi d'avoir un début et une fin de zone de neutralisation.

Mais on ne peut pas, avec cette option, neutraliser le métacaractère « apostrophe » puisqu'il marque la fin de la zone. Et le métacaractère « backslash » qui pourrait résoudre cet inconvénient ne fonctionnera pas puisqu'il sera lui‑même neutralisé.

Exemple

Solution avec le métacaractère « quote simple » :

 
Sélectionnez
Prompt> echo '* (une étoile)' 
Prompt> echo 'Il a crié "assez"; mais cela ne suffisait pas' 
Prompt> # Impossible d'afficher la troisième ligne avec la quote simple 
Prompt> echo 'A et B > 0 <=> A + B > B'

VII-D. Le double-guillemet ou « double-quote »

Le métacaractère « double-guillemet » a pour effet de neutraliser tous les métacaractères situés après, sauf le métacaractère « dollar » (qui permet d'accéder au contenu d'une variable), le métacaractère « accent grave » (qui permet la sous‑exécution), le métacaractère « double-guillemet » (qui permet de marquer la fin de la zone de neutralisation), et le métacaractère « backslash » s'il est suivi d'un métacaractère de la liste ci‑dessus (ce qui permet donc de neutraliser ledit métacaractère). On peut donc, avec cette option, neutraliser le métacaractère « double-guillemet » puisqu'il fait partie de la liste ; donc qu'il est neutralisable par le métacaractère « backslash ».

Exemple

Solution avec le métacaractère « double-guillemet » :

 
Sélectionnez
Prompt> echo "* (une étoile)" 
Prompt> echo "Il a crié \"assez\"; mais cela ne suffisait pas" 
Prompt> echo "L'habit à \$100 ne fait pas le moine" 
Prompt> echo "A et B > 0 <=> A + B > B"

précédentsommairesuivant