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

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