ITEEDU

3.3. 引用字符

3.3.1. Why?

许多键在某些上下文或其他环境中有着特殊的含义。引用用来去除字符或者字的特殊含义:引用可以屏蔽对特殊字符的特殊处理,它们能防止识别保留字等,且可以屏蔽参数扩展。

3.3.2. 转义字符

转义字符用于去除一个单个字符的特殊意义。一个非引用的反斜杠,\,在Bash中被用作转义字符。它保留了跟随在之后的字符的字面值,除了 newline。如果在反斜杠之后一个换行字符立即出现,当行的长度比终端的宽度更长时转义字符使行得以继续;当比终端的宽度要宽时标记了行的延续;反斜杠从输入流中被移除并有效地忽略。

franky ~> date=20021226

franky ~> echo $date
20021226

franky ~> echo \$date
$date

这个例子中,变量 date 建立以存储一个值。第一个 echo 显示了这个变量的值,不过第二个,$ 被转义了。

3.3.3. 单引号

单引号('')用于保持在引号内的每个字符的字面值。一个单引号乃至用反斜杠转义后都不能在2个单引号之间出现。

我们继续先前的例子:

franky ~> echo '$date'
$date

3.3.4. 双引号

使用双引号保持引号内的所有字符的字面值,除了$,``,\。

在双引号中,$和``保留着特殊的含义。

反斜杠只有跟随在$,``,\ 或者换行符之后才保留原来的意义。在双引号组中反斜杠,Within double quotes, the backslashes are removed from the input stream when followed by one of these characters. Backslashes preceding characters that don't have a special meaning are left unmodified for processing by the shell interpreter.

在2个双引号之中,一个双引号可以用反斜杠开始被引用。

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'” 形式的词用一个特殊的方式来对待。词扩展成一个字符串,The word expands to a string, with backslash-escaped characters replaced as specified by the ANSI-C standard. 反斜杠转义序列可以在Bash文档中找到。

3.3.6. 场合

一个$标记开头的双引用字符串将导致字符串根据当前的场合来进行转化。如果当前的场合是 “C” 或者 “POSIX”,那么$标记就被忽略。如果字符串被转化和替换的话,那么替换部分就是双引用的。