TranslateProject/published/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md
Xingyu Wang 0ae12749a9 RP
@zEpoch
https://linux.cn/article-15598-1.html
这篇翻译不够认真,没有经过检查,下回要更认真一些。
2023-03-05 13:49:36 +08:00

126 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[#]: subject: "5 escape sequences for your Linux shell"
[#]: via: "https://opensource.com/article/23/2/escape-sequences-linux-shell"
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
[#]: collector: "lkxed"
[#]: translator: "zepoch"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15598-1.html"
5 个有用的 Linux Shell 转义序列
======
![][0]
> 如何在你的 Bash 终端使用这些秘密代码,请下载我们新的 Linux 元字符速查表。
我最近在读一篇 Don watkins [关于 Shell 元字符的文章][1]。他的文章让我想到了你可以用 shell 输入做的所有的奇怪事情。虽然我可能还没有发现极端的情况,但是我经常发现 shell 转义序列,比如 `\b`、`\t` 和 `\f` 非常有用。
转义序列是一种特殊类型的终端输入。它们旨在让你能够输入物理键盘上没有的字符或触发事件。下面是我最喜欢的 Bash shell 的转义序列。
### 1、退格符
你可以在命令中输入若干退格符,以便在命令执行时触发。例如这个命令,你可能会认为它的输出是`ab`,但是看一下真正的输出:
```
$ echo a$'\b'b
b
```
从技术上来说Shell 确实输出了 `ab`(你可以通过在命令后面附加 `| wc -m` 来确认这一点),但是全部输出的一部分是 `\b` 退格事件。退格键在输出 `b` 字符之前删除了 `a` 字符,因此输出只有 `b` 字符。
### 2、换行符
换行符是一个让你的 Shell 转到下一行的第 0 列的信号。这一点很重要,当使用像 [printf][2] 这样的命令时,它不会像 `echo` 那样在输出的末尾自动添加换行符。看看不带 `\n` 换行符的 `printf` 语句和带换行符的 `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、制表符
有两种制表符转义序列:水平制表符 `\t` 和垂直制表符 `\v`。水平制表符如下所示:
```
$ echo a$'\t'b
a b
```
理论上,垂直制表符是相同的原理,但是在垂直空间中。然而,在大多数控制台上,一行的垂直间距是不可变的,所以它通常看起来很像一个换页符:
```
$ echo a$'\v'b
a
b
```
### 5、Unicode
Unicode 标准中有很多可用的字符,而你的键盘只有大约 100 个键。在 Linux 上有几种方法可以输入 [特殊字符][3],但是将它们输入到终端的一种方法是使用 Unicode 转义序列。这个转义序列以 `\u` 开头,后跟一个十六进制值。你可以在文件 `/usr/share/X11/locale/en_US.UTF-8/Compose` 中找到许多 Unicode 值。你也可以在 [https://www.Unicode.org/charts/][4] 查看 Unicode 规范。
这对于输入像圆周率 π(圆的周长与直径之比)等常见符号非常有用:
```
$ echo $'\u03C0'
π
```
还有许多其他的符号和字符:
```
$ echo $'\u270B'
$ echo $'\u2658'
$ echo $'\u2B67'
```
有盲文符号、音乐符号、字母、电气符号、数学符号、表情符号、游戏符号等等。事实上,有如此多的可用符号,有时你需要 `\U`注意大写字母Unicode 转义序列来访问高区的 Unicode。例如这张红心 5 的扑克牌只出现在 `\U` 转义序列中:
```
$ echo $'\U1F0B5'
🂵
```
浏览一下 Unicode 规范,找到适合你的位置,并使用 `\u``\U` 来访问你需要的所有特殊符号。
### 除此之外
Bash Shell 的手册页中列出了 18 个转义序列我发现其中一些更有用。我已经在本文中介绍了我最爱的几个Don Watkins 也谈到了他在文章中最常用的元字符,但是还有更多待发现。有很多方法可以对字母和数字、子 Shell、数学方程等进行编码。为了更好地了解 Shell 可用的元字符,可以下载我们的 [元字符速查表][5],你可以在使用计算机上最强大的应用程序 —— Linux 终端时将它放在手边。
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/2/escape-sequences-linux-shell
作者:[Seth Kenlon][a]
选题:[lkxed][b]
译者:[zepoch](https://github.com/zepoch)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/seth
[b]: https://github.com/lkxed/
[1]: https://opensource.com/article/22/2/metacharacters-linux
[2]: https://opensource.com/article/20/8/printf
[3]: https://opensource.com/article/22/7/linux-compose-key-cheat-sheet
[4]: https://www.unicode.org/charts/
[5]: https://opensource.com/downloads/linux-metacharacters-cheat-sheet
[0]: https://img.linux.net.cn/data/attachment/album/202303/05/134703ne9559n9rmrer6ee.jpg