TranslateProject/translated/tech/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md
2023-03-03 21:54:33 +08:00

5.0 KiB
Raw Blame History

5 对你有帮助的 Linux shell 的转义序列

我最近在读一篇关于 shell 字符的文章,这篇文章的作者是 Opensource.com 网站的通讯作者 Don watkins。他的文章让我想到了你可以用 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 这样的命令时,它不会像 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. 制表符

There are two tab escape sequences: the \t horizontal tab and the \v vertical tab. The horizontal tab is exactly what you'd expect.有两种制表符转义序列:水平制表符 \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值。您也可以在 https://www.Unicode.org/charts/ 查看 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 可用的元字符,可以下载我们的元字符备忘表使得您可以更好地使用计算机上最强大的应用程序——Linux终端时将它放在手边。


via: https://opensource.com/article/23/2/escape-sequences-linux-shell

作者:Seth Kenlon 选题:lkxed 译者:zepoch 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出