Linux shell 的 5 个转义序列

在 Bash 终端中使用这些秘密代码。下载我们新的 Linux 元字符速查表。
8 位读者喜欢这篇文章。
bash logo on green background

Opensource.com

我最近阅读了 Opensource.com 特约撰稿人 Don Watkins 撰写的一篇关于 shell 元字符的文章。他的文章让我想到了你可以使用 shell 输入做的所有奇怪的事情。虽然我可能还没有发现极端情况,但我经常发现 shell 转义序列,如 \b\t\f 非常有用。

转义序列是一种特殊的终端输入类型。它们旨在让您能够输入物理键盘上可能没有的字符或事件。以下是我最喜欢的 Bash shell 转义序列。

1. 退格

您可以输入退格字符作为命令的一部分,或多或少地加载它以在命令执行时触发。例如,随意查看此命令,您可能会期望其输出为 ab,但请查看实际输出

$ echo a$'\b'b
b

从技术上讲,shell 确实输出了 ab(您可以通过在命令末尾附加 | wc -m 来确认这一点),但总输出的一部分是 \b 退格事件。退格删除了 a,然后输出了 b,因此可见的输出仅为 b

2. 换行

换行符是您的 shell 转到下一行第 0 列的信号。当使用像 printf 这样的命令时,这至关重要,因为该命令不会像 echo 那样假定您希望在输出末尾添加换行符。请查看不带 \n 换行符的 printf 语句与带换行符的语句之间的区别

$ printf "%03d.txt" 1
001.txt$
$ printf "%03d.txt\n" 1
001.txt
$

3. 换页

\f 换页信号类似于换行符,但没有返回到第 0 列的强制要求。以下是使用换页而不是换行符的 printf 命令

$ printf "%s\f" hello
hello
     $

您的 shell 提示符在下一行,但不在行的开头。

4. Tab

有两个制表符转义序列:\t 水平制表符和 \v 垂直制表符。水平制表符与您期望的完全一样。

$ echo a$'\t'b
a     b

从理论上讲,垂直制表符的原理相同,但在垂直空间中。但在大多数控制台上,行的垂直间距不是可变的,因此它通常看起来很像换页

$ echo a$'\v'b
a
 b

5. Unicode

Unicode 标准中有很多字符可用,而您的键盘只有大约 100 个键。在 Linux 上有几种输入特殊字符的方法,但将它们输入到终端的一种方法是使用 Unicode 转义序列。您可以使用 \u 后跟十六进制值来启动此转义序列。您可以在文件 /usr/share/X11/locale/en_US.UTF-8/Compose 中找到许多 Unicode 值,或者您可以查看 Unicode 规范 https://www.unicode.org/charts/

对于输入常用符号(如 Pi,圆的周长与其直径的比率),这可能是一个有用的技巧

$ echo $'\u03C0'
π

还有许多其他符号和字符。

$ echo $'\u270B'
✋
$ echo $'\u2658'
♘
$ echo $'\u2B67'

有盲文、音乐符号、字母表、电气符号、数学符号、表情符号、游戏符号等等。实际上,有太多的可用符号,以至于有时您需要 \U(注意大写字母)Unicode 转义序列来访问高范围内的 Unicode。例如,这张红桃 5 扑克牌仅在使用 \U 转义序列时才会出现

$ echo $'\U1F0B5'
🂵

在 Unicode 规范中四处看看,找到您感兴趣的领域,并使用 \u\U 访问您需要的所有特殊符号。

转义 shell

Bash shell 的手册页中列出了 18 个转义序列,我发现其中一些比其他更有用。我在本文中介绍了我最喜欢的,Don Watkins 在他的文章中谈到了他最常用的元字符,但仍有更多内容有待发现。有多种方法可以编码字母和数字范围、子 shell、数学方程式等等。要全面了解 shell 可用的元字符,请下载我们的元字符速查表,并在您越来越擅长使用计算机上最强大的应用程序:Linux 终端时,将其放在手边。

接下来阅读什么

Linux 元字符速查表

元字符是 Bash 和其他 shell 中具有特殊含义的符号。它们不会被 shell 字面解释,而是会更改 shell 处理输入和输出的方式……

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时从事这两个行业。

2 条评论

不错的初学者信息。我更喜欢使用 "echo -e",这样你就不需要在元字符前面添加 $。此外,我使用 \xHH 来执行十六进制。另外,我发现 hexdump(通常是 'hexdump -C')可以检查事物是否符合我的预期,或者查看可能嵌入了不可打印字符的内容。

$ echo a $'\b'b |hexdump -C
00000000 61 20 08 62 0a |a .b.|
00000005

$ echo -e "a \bb" |hexdump -C
00000000 61 20 08 62 0a |a .b.|
00000005

我认为 "echo -e" 只是一个更简洁、更明显的方法。

喜欢这篇文章!许多这些转义序列起源于 Unix 终端是电传打字机(使用大卷纸而不是计算机屏幕)的时候。我在 1980 年代和 1990 年代使用点阵打印机时也使用过这些。

\f 换页符告诉打印机跳到下一页。打印的页面每页有 66 行,因此如果您在第 10 行,使用换页符让打印机自动弹出页面比给打印机 56 个空行更快。

\v 垂直制表符类似;我记得我们在大学拥有的旧纸质终端会将页面分成几个部分,因此垂直制表符会跳到,比如说,下一个 "1 英寸" 的起始位置。其他打印机可以用不同的垂直制表符进行编程,例如一个 "制表符" 将您置于页眉中,另一个 "制表符" 将您置于正文中,另一个 "制表符" 用于页脚。垂直制表符比给打印机一些空行以移动到正确位置更快。

\t 水平制表符也是如此。使用水平制表符,打印头会跳到下一个制表符位置。特别是对于较旧的打印机,使用水平制表符比向打印机提供一些空格更快。

使用 \b 退格键并键入相同的字母是在标准电传打字机或类似打印设备上创建粗体效果的常用方法。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© 2025 open-source.net.cn. All rights reserved.