Різниця між \ e і ^ [


15

Жил пише :

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

Демізей написав :

^ [- це лише представлення ESCAPE і \ e інтерпретується як власне символ ESCAPE

Потім я знайшов цей рядок із статті TechRepublic

Переконайтеся, що ви записуєте послідовність ключів як \ e [24 ~, а не ^ [[24 ~. Це тому, що ^ [послідовність еквівалентна клавіші [Esc], яка представлена ​​\ e в оболонці. Так, наприклад, якщо б послідовність ключів була ^ [[OP, отриманий прив'язуючий код був би \ e [OP.

Але я використовую відображення, які використовують ^ [замість \ e.

Так вони взаємозамінні? Коли мені потрібно використовувати один замість іншого?

Відповіді:


16

Якщо ви подивитесь на стандарт ANSI ASCII , нижня частина набору символів (перші 32) зарезервована "керуючими символами" (іноді їх називають "послідовностями втечі"). Це такі речі, як символ NUL, Подача життя, Повернення перевезення, Вкладка, Дзвоник тощо. Переважну більшість можна імітувати натисканням 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

Все це - уявлення того характеру, яким користується якесь програмне забезпечення чи людина. Я перерахував найпоширеніші з них. Якщо ви розмовляєте з людиною, використовуйте все, що вони зрозуміють. (Очевидно, моя спроба бути впевненою, що ти зрозумієш принаймні одне із цих відшкодувань.) Якщо ти розмовляєш із програмним забезпеченням, зверніться до документації, щоб дізнатися, що воно розуміє.

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

Екран не розпізнає жодну з цих послідовностей евакуації, але розпізнає ^як контрольний префікс, тому ^[означає символ 27.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.