答案1
如果你看一下ANSI ASCII 标准,字符集的下部(前 32 个)是保留的“控制字符”(有时称为“转义序列”)。这些是 NUL 字符、Life Feed、回车、Tab、Bell 等。绝大多数可以通过按下该Ctrl键与另一个键组合来模拟。
第 27 个(十进制)或\033
八进制序列,或0x1b
十六进制序列是转义序列。它们都是同一控制序列的表示。不同的 shell、语言和工具以不同的方式引用此序列。它的Ctrl序列是Ctrl- [,因此有时被表示为^[
的^
简写Ctrl。
您可以通过在命令行中使用Ctrl-来输入控制字符序列作为原始序列v。Ctrl-v对于大多数 shell 和程序来说,停止解释以下按键序列并以其原始形式插入。如果您使用Escape键或Ctrl-执行此操作v,它将在大多数 shell 上显示为^[
。然而,虽然这个序列会被解释,但它不会轻易地剪切和粘贴,并且当遇到某些协议或程序时可能会被简化为非控制字符序列。
为了解决这个问题并使其更易于使用,某些实用程序使用\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
取决于关于正在使用的语言/shell/实用程序。
答案2
所有这些都是某些软件或某些人使用的角色的表示。我列出了最常见的。如果您正在与人交谈,请使用他们能理解的任何内容。 (显然,我试图确保您至少理解其中之一,但结果适得其反。)如果您正在与软件交谈,请查阅文档以了解它所理解的内容。
在 bash 中,转义序列\e
、\033
和作为、、 、 提示和键绑定中的\x1b
参数。在键绑定中,有一种更通用的语法可以使用,因为字符 27 是通过键入+得到的(该语法是对 Emacs 键绑定的模仿)。作为 ; 的参数适用于所有 shell 。其他上下文和符号取决于 shell。printf
$'…'
\C-[
Ctrl[\033
printf
Screen 无法识别任何这些转义序列,但会识别^
为控制前缀,因此^[
表示字符 27。