La différence entre \ e et ^ [

15

Gilles a écrit :

caractère 27 = 033 = 0x1b = ^[=\e

Demizey a écrit :

^ [n'est qu'une représentation de ESCAPE et \ e est interprété comme un caractère ESCAPE réel

Ensuite, j'ai également trouvé cette ligne d'un article TechRepublic

Assurez-vous d'écrire la séquence de touches sous la forme \ e [24 ~ plutôt que ^ [[24 ~. Cela est dû au fait que la séquence ^ [équivaut à la touche [Esc], qui est représentée par \ e dans le shell. Ainsi, par exemple, si la séquence de touches était ^ [[OP, le code de liaison résultant à utiliser serait \ e [OP.

Mais j'ai utilisé des mappages qui utilisent ^ [au lieu de \ e.

Sont-ils donc interchangeables? Quand dois-je utiliser l'un au lieu de l'autre?

Prévoyant
la source

Réponses:

16

Si vous jetez un œil à la norme ANSI ASCII , la partie inférieure du jeu de caractères (les 32 premiers) est réservée aux "caractères de contrôle" (parfois appelés "séquences d'échappement"). Ce sont des choses comme le caractère NUL, Life Feed, Carriage Return, Tab, Bell, etc. La grande majorité peut être émulée en appuyant sur la Ctrltouche en combinaison avec une autre touche.

La 27e \033séquence (décimale) ou octale, ou 0x1bséquence hexadécimale est la séquence d'échappement. Ce sont toutes des représentations de la même séquence de contrôle. Différents shells, langages et outils font référence à cette séquence de différentes manières. Sa Ctrlséquence est Ctrl- [, donc parfois représentée comme ^[, ^étant une main courte pour Ctrl.

Vous pouvez entrer des séquences de caractères de contrôle en tant que séquences brutes sur votre ligne de commande en les procédant avec Ctrl- v. Ctrl- vpour la plupart des shells et programmes arrête l'interprétation de la séquence de touches suivante et insère à la place dans sa forme brute. Si vous faites cela avec la Escapeclé ou Ctrl- velle s'affichera sur la plupart des shells comme ^[. Cependant, bien que cette séquence soit interprétée, elle ne se coupera pas et ne se collera pas facilement, et peut être réduite à une séquence de caractères non contrôlée lorsqu'elle est rencontrée par certains protocoles ou programmes.

Pour contourner cela afin de le rendre plus facile à utiliser, certains utilitaires représentent la séquence "brute" soit avec \033(par référence octale), une référence hexadécimale \x1bou par référence de caractère spécial \e. C'est à peu près la même chose dans la manière qui \test interprétée comme un Tab- qui peut également être saisi via Ctrl- i, ou \ncomme une nouvelle ligne ou la Enterclé, qui peut également être saisie via Ctrl- m.

Alors quand Gilles dit:

27 = 033 = 0x1b = ^ [= \ e

Il dit décimal ASCII 27, octal 33, hex 1b, Ctrl- [et \esont tous égaux, cela signifie qu'ils se réfèrent tous à la même chose (sémantiquement).

Quand Demizey dit

^ [n'est qu'une représentation de ESCAPE et \ e est interprété comme un caractère ESCAPE réel

Il signifie sémantiquement, mais si vous appuyez sur Ctrl- v Ctrl- [c'est exactement la même chose que \e, la séquence insérée brute sera très probablement traitée de la même manière, mais ce n'est pas toujours garanti, et il est donc recommandé d'utiliser le programme plus portable \eou 0x1bou en \033fonction sur la langue / shell / utilitaire utilisé.

Drav Sloan
la source
4

Tous ces éléments sont des représentations de ce personnage que certains logiciels ou certains humains utilisent. J'ai énuméré les plus courants. Si vous parlez à un humain, utilisez ce qu'il comprendra. (Évidemment, ma tentative pour être sûr que vous comprendriez au moins un de ces retours de flamme.) Si vous parlez à un logiciel, consultez la documentation pour savoir ce qu'il comprend.

En bash, les séquences d'échappement \e, \033et le \x1btravail comme un argument printf, dans $'…', dans les invites, et les raccourcis clavier. Dans les raccourcis clavier, il existe une syntaxe plus générale \C-[qui fonctionne car le caractère 27 est ce que vous obtenez en tapant Ctrl+ [(cette syntaxe est une imitation des raccourcis clavier Emacs). \033fonctionne dans tous les shells comme argument pour printf; les autres contextes et notations dépendent du shell.

L'écran ne reconnaît aucune de ces séquences d'échappement, mais le reconnaît ^comme préfixe de contrôle, ce qui ^[signifie donc le caractère 27.

Gilles 'SO- arrête d'être méchant'
la source