Разница между \ е и ^ [

15

Жиль написал :

символ 27 = 033 = 0x1b = ^[=\e

Демизей написал :

^ [это просто представление ESCAPE и \ e интерпретируется как фактический символ ESCAPE

Тогда я также нашел эту строку из статьи TechRepublic

Убедитесь, что вы записали последовательность клавиш как \ e [24 ~, а не ^ [[24 ~. Это потому, что последовательность ^ [эквивалентна клавише [Esc], которая представлена ​​\ e в оболочке. Так, например, если бы последовательность клавиш была ^ [[OP, то результирующий код связывания для использования был бы \ e [OP.

Но я использовал сопоставления, которые используют ^ [вместо \ e.

Так они взаимозаменяемы? Когда мне нужно использовать один вместо другого?

Forethinker
источник

Ответы:

16

Если вы посмотрите на стандарт ANSI ASCII , нижняя часть набора символов (первые 32) - это зарезервированные «управляющие символы» (иногда их называют «escape-последовательностями»). Это такие вещи, как NUL-символ, Life Feed, Carriage Return, Tab, Bell и т. Д. Подавляющее большинство может быть воспроизведено нажатием Ctrlклавиши в сочетании с другой клавишей.

27-я (десятичная) или \033восьмеричная последовательность, или 0x1bшестнадцатеричная последовательность - это последовательность Escape. Все они представляют одну и ту же последовательность управления. Различные оболочки, языки и инструменты относятся к этой последовательности по-разному. Его Ctrlпоследовательность Ctrl- [, следовательно , иногда быть представлена в виде ^[, ^будучи короткую руку за Ctrl.

Вы можете вводить последовательности управляющих символов в виде необработанных последовательностей в командной строке, продолжая их с Ctrl- v. Ctrl- vбольшинству оболочек и программ прекращает интерпретацию следующей последовательности клавиш и вместо этого вставляет ее в необработанном виде. Если вы сделаете это с помощью Escapeклавиши или Ctrl- vона будет отображаться на большинстве оболочек как ^[. Однако, хотя эта последовательность будет интерпретироваться, она не будет легко вырезаться и вставляться и может быть уменьшена до последовательности неконтролирующих символов, когда встречаются в определенных протоколах или программах.

Чтобы обойти это, чтобы упростить использование, некоторые утилиты представляют «необработанную» последовательность с помощью \033(восьмеричной), шестнадцатеричной \x1bили специальной символьной ссылки \e. Это во многом аналогично тому, что \tинтерпретируется как Tab- который, кстати, также можно вводить через Ctrl- i, или \nкак перевод строки или Enterклавиша, которую также можно вводить через Ctrl- m.

Поэтому, когда Жиль говорит:

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

Он говорит, что десятичное ASCII 27, восьмеричное 33, шестнадцатеричное 1b, Ctrl- [и \eвсе они равны, он означает, что они все относятся к одному и тому же (семантически).

Когда Демизей говорит

^ [это просто представление ESCAPE и \ e интерпретируется как фактический символ ESCAPE

Он имеет в виду семантически, но если вы нажмете Ctrl- v Ctrl- [это точно так же, как \eнеобработанная вставленная последовательность, скорее всего, будет обрабатываться так же, но это не всегда гарантируется, и поэтому рекомендуется использовать программно более переносимым \eили 0x1bили в \033зависимости на используемом языке / оболочке / утилите.

Драв Слоан
источник
4

Все это представления о том персонаже, который используют некоторые программы или люди. Я перечислил самые распространенные. Если вы говорите с человеком, используйте то, что он поймет. (Очевидно, моя попытка быть уверенной, что вы поймете хотя бы один из них, дал о себе знать.) Если вы разговариваете с программным обеспечением, обратитесь к документации, чтобы узнать, что оно понимает.

В Баше, последовательности побега \e, \033и \x1bработе в качестве аргумента printf, в $'…', в подсказках, и в ключевых привязках. В привязках клавиш есть более общий синтаксис, \C-[который работает, потому что символ 27 - это то, что вы получаете, набрав Ctrl+ [(этот синтаксис является имитацией привязок клавиш Emacs). \033работает во всех оболочках в качестве аргумента printf; другие контексты и обозначения зависят от оболочки.

Экран не распознает ни одну из этих escape-последовательностей, но распознает ^в качестве префикса управления, что ^[означает символ 27.

Жиль "ТАК - прекрати быть злым"
источник