为什么终端将转义表示为^ [?

时间:2019-04-16 08:15:20

标签: terminal escaping pty

据我了解,转义字符可以通过以下方式表示。

  • 八进制:\ 033
  • 十六进制:\ x1B
  • 十进制:27
  • unicode:\ u001B
  • 在我的终端机中:^ [

在不同数量的系统中,前4个表示形式仅是十进制27。但是最后一个表示形式^[似乎没有与十进制27的任何链接,这似乎是任意的。所以我想知道为什么选择^[作为表示终端中逃生的方式,这是怎么发生的呢?

1 个答案:

答案 0 :(得分:1)

  

但是最后一个表示形式^[似乎没有与小数点27的任何链接

乍一看似乎如此,但实际上有一个链接。

首先,您需要了解,^[之类的脱字号表示在按下 [时按住了控制键,因此^[ ctrl < / kbd>- [。换句话说,转义键的行为与 ctrl - [”完全相同(在终端中)。 (关于转义键为何会产生此特殊字符的原因:请参见答案的第二部分。)

字符[以ASCII编码为十进制91或0x5b,但查看二进制表示形式最有用:0b01011011。 ^[或转义键编码为十进制27或0b00011011。如果我们对齐这两个二进制数:

 [  0b01011011
^[  0b00011011

我们可以看到^[只是一个[,位7已清除。实际上,添加控制键实际上只是清除了字符代码 1 的前三位。

所以^[和27之间的联系是91 − 64 = 27:)


  

为什么选择^[作为表示终端中逃生的方式

我绝对不知道!