Почему терминалы обозначают escape как ^ [? - PullRequest
0 голосов
/ 16 апреля 2019

Как я понимаю, escape-символ может быть представлен следующими способами.

  • восьмеричное: \ 033
  • шестнадцатеричное: \ x1B
  • десятичное число: 27
  • unicode: \ u001B
  • в моем терминале: ^ [

Первые 4 представления являются просто десятичными 27 в различных системах счисления.Но последнее представление ^[, похоже, не имеет никакого отношения к десятичному числу 27, оно кажется произвольным.Поэтому мне интересно, почему ^[ был выбран как способ обозначения побега в терминале, и как это произошло?

1 Ответ

1 голос
/ 16 апреля 2019

Но последнее представление ^[, похоже, не имеет какой-либо связи с десятичной дробью 27

На первый взгляд это может показаться так, но на самом деле ссылка есть.

Во-первых, вы должны понимать, что курсор в нотации, такой как ^[, означает, что клавиша управления удерживается при нажатии [, поэтому ^[ равно ctrl - [.Другими словами, управляющая клавиша действует точно так же (в терминале), как ctrl - [.(Относительно того, почему клавиша escape создает именно этот символ: см. Вторую часть моего ответа.)

Символ [ закодирован в ASCII как десятичный 91 или 0x5b, но это наиболее полезно посмотреть надвоичное представление: 0b01011011.^[, или клавиша ESC, кодируется как десятичное 27 или 0b00011011.Если выровнять эти два двоичных числа:

 [  0b01011011
^[  0b00011011

, мы увидим, что ^[ - это просто [ с очищенным битом 7.Фактически, добавление управляющего ключа, по сути, просто очищает три верхних бита кода символа 1 .

Таким образом, связь между ^[ и 27 заключается в том, что 91- 64 = 27:)


, почему ^[ был выбран в качестве способа представления побега в терминале

Я понятия не имею!

...