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

Why do terminals represent escape as ^[?

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

前 4 种表示形式在不同的数字系统中只是十进制的 27。但是最后的表示^[好像没有任何link到十进制的27,显得随意。所以我想知道为什么选择 ^[ 作为在终端中表示转义的方式,这是怎么发生的?

But the last representation ^[ doesn't seem to have any link to decimal 27

乍一看可能是这样,其实是有的link。

首先,你需要明白像^[这样的符号中的插入符表示按住控制键的同时按下[,所以^[ctrl-[。换句话说,转义键的作用(在终端中)与 ctrl-[ 完全相同。 (至于为什么转义键会产生这个特殊字符:请参阅我的回答的第二部分。)

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

 [  0b01011011
^[  0b00011011

我们可以看到 ^[ 只是第 7 位被清除的 [。其实加control键本质上只是把字符码的前三位清空1.

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


why ^[ was chosen as the way to represent escape in a terminal

我完全不知道!