为什么终端将转义表示为 ^[?
Why do terminals represent escape as ^[?
据我了解,转义字符可以用以下方式表示。
- 八进制:\033
- 十六进制:\x1B
- 十进制:27
- unicode: \u001B
- 在我的终端中:^[
前 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
我完全不知道!
据我了解,转义字符可以用以下方式表示。
- 八进制:\033
- 十六进制:\x1B
- 十进制:27
- unicode: \u001B
- 在我的终端中:^[
前 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
我完全不知道!