引用(QUOTING)

引用 Quoting 用来去掉特定字符或词的特殊意义。引用可以用来禁止对特殊字符的处理, 阻止保留字被识别,还用来阻止参数的扩展。

上面在 DEFINITIONS 定义 中列出的每个元字符 metacharacters 对于 shell 都有特殊意义。如果要表达它的本义,必须引用它。

在使用命令行历史扩展功能时,history expansion 字符,通常是 !,必须被引用,才不会进行历史扩展。

有三种引用机制:转义字符 (escape character), 单引号和双引号。

一个未被引用的反斜杠 (\) 是转义字符 escape character。 它保留其后下一个字符的字面意义,除非那是一个新行符。 如果 \ 和新行符成对出现,并且反斜杠自身没有被引用,那么 \<newline> 被视为续行标志 (意思是,它被从输入流中删除并忽略了)。

将字符放在单引号之中,将保留引用中所有字符的字面意义。单引号不能包含在单引号引用之中,即使前面加上了反斜杠。

将字符放在双引号中,同样保留所有字符的字面意义,例外的情况是 $, `, 和 \。 字符 $` 在双引号中仍然具有特殊意义。反斜杠只有后面是下列字符时才有特殊意义: $, `, ", \, 或 <newline>. 双引号可以包含在双引号引用中,但要在前面加上一个反斜杠。

特殊的参数 *@ 在双引号中有特殊意义(参见下面的 PARAMETERS 参数 章节)。

形式为 $'string' 的词会被特殊处理。它被扩展为 string,其中的反斜杠转义字符 被替换为 ANSI C 标准中规定的字符。反斜杠转义序列,如果存在的话,将做如下转换:

\a

alert (bell) 响铃

\b

backspace 回退

\e

an escape character 字符 Esc

\f

form feed 进纸

\n

new line 新行符

\r

carriage return 回车

\t

horizontal tab 水平跳格

\v

vertical tab 竖直跳格

\

backslash 反斜杠

\'

single quote 单引号

\nnn

一个八比特字符,它的值是八进制值 nnn (一到三个数字)。

\xHH

一个八比特字符,它的值是十六进制值 HH (一到两个十六进制数字)。

\cx

一个 ctrl-x 字符

扩展结果是单引号引用的,就好像 $ 符号不存在一样。

双引号引用字符串前面加上一个 $ 符号将使得这个字符串被根据当前语言环境 (locale) 来翻译。 如果当前语言环境是 C 或者 POSIX,这个符号将被忽略。 如果这个字符串被翻译并替换了,那么替换结果是双引号引用的。