échappement

Une définition du Jargon Français.
Aller à : Navigation, rechercher

nom masculin.  [exécution]. Le fait de s'échapper, sur un ordinateur.

On parle de « la touche d'échappement », qui n'est autre que la touche échap ou « esc » et expédie au programme une requête « je souhaite sortir de la procédure en cours le plus vite possible, en restaurant l'état précédent et sans trop de bris ».

On peut par ailleurs protéger (on dit aussi banaliser) un ou plusieurs caractères, dans une chaîne de caractères, au moyen d'un caractère d'échappement, de sorte que le programme actif ne retienne que son sens littéral, donc qu'il ne l'interprète pas. Exemple : si le programme comprend '*' comme signifiant "tous les éléments" (lire à ce propos caractère générique) et qu'un élément nommé '*' existe, on sélectionnera ce dernier en précisant au programme que le nom fourni est à prendre tel quel, par exemple (la convention d'échappement dépend du programme considéré) en saisissant "\*" au lieu du simple "*". Dans cet exemple le \ est un caractère d'échappement.

Exemple

Sous un shell Unix:

J'examine le contenu du fichier nommé toto:

$ cat toto
rien
.
hop.

J'invoque grep en lui demandant de trouver toutes les lignes de toto recelant un caractère «point».

$ grep . toto
rien
.
hop.

Le résultat est incorrect (la ligne contenant «rien» ne devrait pas apparaître) car j'ai négligé que, pour grep, ce caractère revêt la signification particulière «n'importe quel caractère».

Je tente d'échapper le point fourni en argument à grep en le plaçant juste après un antislash, ce qui exprime «le caractère suivant est à prendre littéralement».

$ grep \. toto
rien
.
hop.

Cela échoue encore, donc manifestement grep continue d'interpréter le point fourni en argument. La cause du problème est que le programme avec j'interagis ainsi est en fait le shell, qui lui aussi traite les caractères d'échappement donc absorbe l'antislash et communique à grep le seul point.

La preuve:

$ echo grep \. toto
grep . toto

Placer ainsi un echo préalable montre ce que reçoit la commande invoquée, donc (ici) la façon dont est invoqué grep: grep . toto, ce qui confirme l'hypothèse.

J'échappe donc le caractère d'échappement afin que le shell le préserve. Commençons par un test:

$ echo grep \\. toto
grep \. toto

Tout semble OK, passons à la pratique:

$ grep \\. toto
.
hop.

Victoire!

Autre approche:

$ grep '\.' toto
.
hop.