\ e和^ [之间的区别


15

吉尔斯写道

字符27 = 033 = 0x1b = ^[=\e

Demizey 写道

^ [只是ESCAPE的表示形式,\ e被解释为实际的ESCAPE字符

然后我还从TechRepublic的文章中找到了这一行

确保将键序列写为\ e [24〜而不是^ [[24〜。这是因为^ [序列等效于[Esc]键,该键在外壳程序中由\ e表示。因此,例如,如果键序列为^ [[OP,则要使用的最终绑定代码将为\ e [OP。

但是我一直在使用使用^ [而不是\ e的映射。

那么它们可以互换吗?我什么时候需要使用一个而不是另一个?

Answers:


16

如果您看一下ANSI ASCII标准,则字符集的下部(前32个)保留为“控制字符”(有时称为“转义序列”)。这些是NUL字符,Life Feed,回车,Tab,Bell等内容。绝大多数Ctrl按键都可以通过与其他按键组合使用来模拟。

第27个(十进制)或\033八进制序列或0x1b十六进制序列转义序列。它们都是相同控制序列的表示。不同的外壳,语言和工具以不同的方式引用此序列。其Ctrl序列被Ctrl- [,因此有时被表示为^[^是用于手短Ctrl

您可以通过继续他们进入控制字符序列作为命令行上的原始序列Ctrl- vCtrl- 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都是平等的,他的意思,他们都指的是同样的事情(语义)。

当Demizey说

^ [只是ESCAPE的表示形式,\ e被解释为实际的ESCAPE字符

他的意思是语义,但如果按Ctrl- v Ctrl- [这是完全一样的\e,原始的插入顺序将最有可能的处理方式相同,但这并不总是有保证的,因此它建议使用编程方式更便携\e0x1b\033视在使用的语言/外壳/工具上。


4

所有这些都是某些软件或某些人使用的字符的表示。我列出了最常见的。如果您正在与人交谈,请使用他们会理解的任何内容。(显然,我试图确保您至少了解其中的一种。)如果您正在使用软件,请查阅文档以了解它的理解。

在bash中,转义序列\e\033并且在,提示和键绑定中\x1b用作,的参数。在键绑定中,有一种更通用的语法可以使用,因为字符27是您通过键入+ 得到的(该语法是对Emacs键绑定的模仿)。在所有外壳中都作为对...的论证; 其他上下文和符号与外壳相关。printf$'…'\C-[Ctrl[\033printf

屏幕无法识别任何这些转义序列,但会识别^为控制前缀,因此^[表示字符27。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.