3.3. 引用字符

3.3.1. 为什么?

许多按键在某些上下文中具有特殊含义。引用用于移除字符或单词的特殊含义:引号可以禁用特殊字符的特殊处理,它们可以防止保留字被识别为保留字,并且它们可以禁用参数扩展。

3.3.2. 转义字符

转义字符用于移除单个字符的特殊含义。未被引号包裹的反斜杠 `\` 在 Bash 中被用作转义字符。它保留其后跟随的下一个字符的字面值,但 换行符 除外。如果换行符紧跟在反斜杠之后出现,则它标记着行的延续,当该行比终端宽度更长时;反斜杠从输入流中移除并被有效地忽略。

franky ~> date=20021226

franky ~> echo $date
20021226

franky ~> echo \$date
$date

在此示例中,变量date被创建并设置为保存一个值。第一个 echo 显示变量的值,但对于第二个,美元符号被转义。

3.3.3. 单引号

单引号 (`''`) 用于保留引号内每个字符的字面值。单引号不能出现在单引号之间,即使前面有反斜杠也不行。

我们继续之前的示例

franky ~> echo '$date'
$date

3.3.4. 双引号

使用双引号,所有被引号包围的字符的字面值都会被保留,除了美元符号、反引号(后引号,``)和反斜杠。

美元符号和反引号在双引号内保留其特殊含义。

反斜杠仅当后跟美元符号、反引号、双引号、反斜杠或换行符时才保留其含义。在双引号内,当反斜杠后跟这些字符之一时,会从输入流中移除。前导字符不具有特殊含义的反斜杠将保持不变,以供 shell 解释器处理。

双引号可以通过在其前面加上反斜杠在双引号内被引用。

franky ~> echo "$date"
20021226

franky ~> echo "`date`"
Sun Apr 20 11:22:06 CEST 2003

franky ~> echo "I'd say: \"Go for it!\""
I'd say: "Go for it!"

franky ~> echo "\"
More input>"

franky ~> echo "\\"
\

3.3.5. ANSI-C 引用

形式为 "$'STRING'" 的单词以特殊方式处理。该单词扩展为一个字符串,其中反斜杠转义字符按照 ANSI-C 标准的规定进行替换。反斜杠转义序列可以在 Bash 文档中找到。

3.3.6. 区域设置

以美元符号开头的双引号字符串将导致该字符串根据当前区域设置进行翻译。如果当前区域设置为 "C""POSIX",则美元符号将被忽略。如果字符串被翻译和替换,则替换项用双引号括起来。