Linux 上 Bash 中的字符转义
摘要
字符用于源代码、命令行以及大多数计算机交互。另一方面,大多数字符在标准键盘上无法通过按键表示,许多字符甚至无法读取。另一类字符是复杂的控制字符。
本教程将讨论 Bash 中的字符转义。首先,我们将简要概述计算机如何表示字符。首先,我们将研究 Bash 中的各种字符串类型。然后,我们将详细介绍 Bash 中的字符转义。
注意 - Linux 命令区分大小写。
Bash 中的字符串
由于一个按键并不能代表键盘上的每个符号,因此写入和存储字符是两个不同的过程。Bash 使用字符串来存储文本。事实上,Bash 中的所有变量本质上都是字符串。它们通常由单引号或双引号括起来的直线序列组成。
我们在一种上下文中解释或推断特定的字符组合,而在另一个上下文中则按字面意思理解,这是这两种方法之间的关键区别。
单引号
在 Bash 中使用单引号 (') 的主要目的是保留每个字符的字面值。当您希望输入保留其字面值而不进行任何数据插值时,可以使用单引号从字符中提取任何特殊值。当您不想使用转义符来改变 Bash 对输入字符串的理解方式时,单引号是一个有用的替代方案。
$ text='a $(echo b) c'
$ echo "${text}"
a $(echo b) c
请注意单引号是如何保持内容完整的。虽然不进行插值,但因此,我们也无法在任何时候将单引号放在另一个单引号内。
双引号
当允许历史记录扩展时,双引号 (") 保留所有字符的字面值,但 ($)、(')、(")、() 和 (!) 字符除外。
$ text="a"
$ text="${text} $(echo "b") c"
$ echo "${text}"
a b c
首先,我们单独使用 [a] 键将字符直接赋值给文本。接下来,使用 ${text} 变量扩展,获取其值。$
Bash 中的转义字符
Bash 中具有特定含义的字符必须在单引号之外进行转义,以保持其字面值。实际上,这主要使用反斜杠转义字符来实现。有时我们可能需要使用其他技巧。
让我们来看看每种方法的适用场合和方法。
1. 双引号
双引号内的反斜杠字符 () 只有在后接 ($)、(')、(")、() 或换行符时才具有特定含义。如果在双引号内,反斜杠字符后接上述任何字符,则输出中不会显示反斜杠字符。如果反斜杠字符前有反斜杠字符,则双引号之间可以使用双引号。 为了转义双引号字符串中的文本,我们需要在字符前添加反斜杠字符。
$ text1="a $(echo b) c"
$ text2="a \$(echo b) c"
$ echo "${text1}"
a b c
$ echo "${text2}"
a $(echo b) c
在上面的例子中,看看美元符号在 text2 中是如何转义的,这样它既保留了字面含义,又失去了其特殊功能。
不使用引号
正如我们已经演示的那样,取消引号是有代价的。为了使任何不带引号的序列统一,以下字符必须全部转义:逗号、句号、下划线、加号、冒号、商业符号、百分号、斜杠和连字符。
$ text=a\ \&\ b\ \&\ c
$ echo "${text}"
a & b & c
作为一种良好做法,最好不要使用引号。
结论
在本教程中,我们讨论了 Bash 中的字符转义。各种字符编码表是我们首先发现的。此外,我们还观察到一些字符仅用作命令或标记文本,无法打印。我们需要一种方法来避免使用此类字符,以便按字面意思使用它们。我们研究了纯 Bash 以及 Bash 中几种典型的内置字符转义情况。
本教程演示了如何在 Bash 中使用单引号和双引号,并阐明了它们之间的区别。了解了它们的区别后,您应该能够告诉 Shell 如何读取输入字符串,以及是按原样输出输入还是插入数据。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

