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 如何读取输入字符串,以及是按原样输出输入还是插值数据。

更新于: 2023年4月4日

205 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告