Der Unterschied zwischen \ e und ^ [

15

Gilles schrieb :

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

Demizey schrieb :

^ [ist nur eine Darstellung von ESCAPE und \ e wird als tatsächliches ESCAPE-Zeichen interpretiert

Dann habe ich auch diese Zeile aus einem TechRepublic-Artikel gefunden

Stellen Sie sicher, dass Sie die Tastenfolge als \ e [24 ~ und nicht als ^ [[24 ~ schreiben. Dies liegt daran, dass die ^ [Sequenz der [Esc] -Taste entspricht, die in der Shell durch \ e dargestellt wird. Wenn die Schlüsselsequenz beispielsweise ^ [[OP wäre, wäre der resultierende zu verwendende Bindungscode \ e [OP.

Aber ich habe Zuordnungen verwendet, die ^ [anstelle von \ e verwenden.

Also sind sie austauschbar? Wann brauche ich eins anstelle des anderen?

Vordenker
quelle

Antworten:

16

Wenn Sie sich den ANSI-ASCII-Standard ansehen , sind die unteren Teile des Zeichensatzes (die ersten 32) reservierte "Steuerzeichen" (manchmal als "Escape-Sequenzen" bezeichnet). Dies sind Dinge wie das NUL-Zeichen, Life Feed, Carriage Return, Tab, Bell usw. Die überwiegende Mehrheit kann durch Drücken der CtrlTaste in Kombination mit einer anderen Taste emuliert werden .

Die 27. (Dezimal-) oder \033Oktalsequenz oder 0x1bHexadezimalsequenz ist die Escape-Sequenz. Sie sind alle Darstellungen derselben Kontrollsequenz. Verschiedene Shells, Sprachen und Tools verweisen auf diese Sequenz auf unterschiedliche Weise. Seine CtrlSequenz ist Ctrl- [, daher manchmal als dargestellt wird ^[, ^für eine kurze Hand zu sein Ctrl.

Sie können Steuerzeichenfolgen als unformatierte Folgen in Ihre Befehlszeile eingeben, indem Sie mit Ctrl- fortfahren v. Ctrl- Bei vden meisten Shells und Programmen wird die Interpretation der folgenden Tastenfolge angehalten und stattdessen in ihrer Rohform eingefügt. Wenn Sie dies entweder mit der EscapeTaste oder Ctrl- tun, wird dies vauf den meisten Muscheln als angezeigt ^[. Diese Sequenz wird zwar interpretiert, lässt sich jedoch nicht einfach ausschneiden und einfügen und kann sich bei bestimmten Protokollen oder Programmen auf eine Nicht-Steuerzeichenfolge reduzieren.

Um dies zu umgehen und die Verwendung zu vereinfachen, stellen bestimmte Dienstprogramme die "unformatierte" Sequenz entweder mit \033(durch Oktalverweis), Hexadezimalverweis \x1boder durch Sonderzeichenverweis dar \e. Dies ist in etwa so, \twie es als Tab- interpretiert wird, was übrigens auch über Ctrl- eingegeben werden kann i, oder \nals Zeilenvorschub oder die EnterTaste, die auch über Ctrl- eingegeben werden kann m.

Also, wenn Gilles sagt:

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

Er sagt dezimal ASCII 27, oktal 33, hex 1b, Ctrl- [und \ealle sind gleich, er meint, sie beziehen sich alle auf dasselbe (semantisch).

Wenn Demizey sagt

^ [ist nur eine Darstellung von ESCAPE und \ e wird als tatsächliches ESCAPE-Zeichen interpretiert

Er bedeutet , semantisch, aber wenn Sie drücken Ctrl- v Ctrl- [das ist genau das gleiche wie \edie rohe inserierte Sequenz wird höchstwahrscheinlich die gleiche Art und Weise behandelt werden, aber dies nicht immer gewährleistet ist, und so ist es empfehlenswert die programmatisch mehr tragbar zu verwenden \eoder 0x1boder \033je in der verwendeten Sprache / Shell / Utility.

Drav Sloan
quelle
4

All dies sind Darstellungen des Charakters, den manche Software oder Menschen verwenden. Ich habe die häufigsten aufgelistet. Wenn Sie mit einem Menschen sprechen, verwenden Sie, was er versteht. (Offensichtlich mein Versuch, sicherzugehen, dass Sie mindestens einen dieser Fehler verstehen.) Wenn Sie mit Software sprechen, lesen Sie in der Dokumentation nach, was diese versteht.

In bash, die Escape - Sequenzen \e, \033und \x1bArbeit als Argument an printf, in $'…', in Eingabeaufforderungen und in Tastenbelegungen. In Tastenkombinationen gibt es eine allgemeinere Syntax, \C-[die funktioniert, da Sie durch Eingabe von Ctrl+ [das Zeichen 27 erhalten (diese Syntax ist eine Nachahmung der Emacs-Tastenkombinationen). \033arbeitet in allen Shells als Argument dafür printf; Die anderen Kontexte und Notationen sind shellabhängig.

Screen erkennt keine dieser Escape-Sequenzen, erkennt sie jedoch ^als Steuerpräfix und ^[bedeutet somit Zeichen 27.

Gilles 'SO - hör auf böse zu sein'
quelle