转义字符
| 转义字符 | |
|---|---|
| 术语名称 | 转义字符 |
| 英语名称 | escape character |
| 转义序列 | |
|---|---|
| 术语名称 | 转义序列 |
| 英语名称 | escape sequence |
转义字符(escape character)是字符中根据作用划分的一个类别。转义字符通常出现在文本环境中,改变其后有限的数个字符的解释方式,这些后续字符将失去原义,并按特殊规则解释。由转义字符开始,包含这些被改变解释方式的字符,所构成的字符串可以看作一个产生新解释的整体,称为转义序列(escape sequence)。
| 转义字符 | |
|---|---|
| 术语名称 | 转义字符 |
| 英语名称 | escape character |
| 别名 | ESC |
转义字符(escape character)也是一个控制字符的名称,该字符也有上述作用,因此使用了同一词语。出现在很多字符集中。在 ASCII 中为 0x1B ,或更好记的 0o33 ,在 EBCDIC 中为 0x27 ,在 Unicode 中为 U+001B <control-001B>, ESCAPE 。需要指代这一字符时,经常缩写为 ESC ,也被展示为 ␛ (U+241B Symbol for Escape)。在 ^ 表示法中表示为 ^[ 。 C 语言及相关语言将这个字符记为 \033 ,有的扩展中可以使用 \e 。
历史
在远程通讯中,用于标记接下来几个字符不使用字符本义的特殊控制字符,被称为 escape 字符,可能取的是“逃脱(escape)被字面解释”的含义。中文译为“转义”。目前在终端中仍然使用。
输入这一字符时,曾经在键盘上使用专属的同名按键输入,这一按键发展为现在的 Escape ⎋ 键(跳出键),或称为 Esc 键。由于该按键在常见的键盘上过于偏僻,这一字符输入时可以使用 Ctrl+[ 代替, Esc 键的这一用法逐渐消失。后来在窗口系统中, Esc 按键曾被借用于触发从窗口等的退出、取消、中止动作,因此中文名称被译为“跳出”。但 Esc 键不是操作系统管理而是应用程序自行处理,这一习惯只是约定俗成,而且也在逐渐失去统一性。
现代使用
控制字符在进行文本解析时仍然有不同的功能,比如 C1 控制字符(0x80-9F)可以通过对应的转义序列 0x1B.40-5F 表达。
常见序列可参考: https://en.wikipedia.org/wiki/ANSI_escape_code
终端中仍然通过 0x9B CSI (Control Sequence Introducer),也就是 0x1B.5B ESC [ 开始的序列触发改变颜色、光标位置、格式等非文本的指令,在终端中使用 ^ 表示法时会展示为 ^[[ 。常见的有尾随数字之后一个 m 的 ^[[3;31;42m (设置斜体红底绿字)的 SGR (Select Graphic Rendition) 类和接可选数字然后是一个特定字母的,比如 ^[[5A 会使得光标向上移动 5 行。但是这样的序列在输出到终端时就会按整个转义序列生效,几乎不会出现在文本文件中。
ISO 2022 规则下 0x8E SS2 和 0x8F SS3 也可以通过 ESC 字符表达为 0x1B.4E ESC N 和 0x1B.4F ESC O 。
一般通过 Esc 或 Ctrl+[ 在终端输入这一字符,并触发对应的转义序列。也可以使用 echo 将通过 Ctrl+V Esc 或 Ctrl+V Ctrl+[ 打出的转义序列输出到终端。程序直接向终端输入的 ESC 序列也有效。
常见起转义作用的字符
ESC 字符是终端中的转义字符,但是在不同上下文中,转义这一功能也可能由其他字符担任。一般来说,转义字符只会出现在部分字符需要不止一种解释方式的上下文中,这是因为解释方式不止一种才需要转义。文本文件中每个字符可能代替它自身,又需要通过这些字符进行控制,也就是需要第二种含义,因此才存在转义字符使得部分普通字符可以被解释为控制含义。
- 编程语言:
- C 语言系及其他有参考的语言中,在字符和字符串的表示中会通过
\开始的序列进行转义,不使用时表示字符字面本身,使用时表示特殊含义。 C 语言的转义字符列表见 https://en.cppreference.com/w/cpp/language/escape.html 。 - shell 中
\是防止下个字符被理解为元字符,' '防止括起的任何字符被理解为元字符。特殊的字符直接使用会被默认作为元字符处理,加上转义后才表示字符本身。 - 正则表达式 中根据不同的版本有差异,通常
\会防止下个字符被理解为元字符。特殊的字符直接使用会被默认作为元字符处理,加上转义后才表示字符本身。但是在部分场景下可能有部分字符转义前后的解释方式是反过来的。
- C 语言系及其他有参考的语言中,在字符和字符串的表示中会通过
- 标记语言:
- 其他:
实际上自然语言中引号在起“特定称谓”和“特殊含义”作用时,也是提醒读者这一词汇并不能按照字面含义理解,和转义字符有一定类似之处。只是这一转义更多在于逻辑上的比喻或象征,而不是显示方面。比如“一群大雁往南飞,一会儿排成个‘人’字,一会儿排成个‘一’字”一句中,“人”和“一”的引号表示它们在这里是特殊含义,不表示人这个物种的个体、不表示数字一,而只表示这两个字的形状。