5.0 KiB
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