每man bash
有三种引号机制:escape字符、单引号和双引号。
非引号的反斜杠 ( ** ) 是 _escape 字符。它保留了下一个字符的字面值,但<新行>除外。如果出现了一个*的反斜线对,并且反斜线本身没有被引用,那么***的反斜线将被视为一个行的延续(也就是说,它将被从输入流中移除并被有效地忽略)。
在单引号中封闭字符会保留引号中每个字符的字面价值。单引号之间不能出现单引号,即使前面有反斜杠。
双引号中的字符保留引号内所有字符的字面价值,但$、` , ** , and, when history expansion is enabled, **!. The characters $ and `在双引号内保留其特殊含义。反斜杠只有在下列字符后保留其特殊含义。$ , ` , “ , / , 或 /. 双引号可以通过在双引号前加反斜杠来引用。如果启用,历史扩展将被执行,除非双引号中出现的!使用反斜线转义。在!前面的反斜线不会被删除。
特殊参数/和@用双引号表示时有特殊含义(参见下面的PARAMETERS*)。
$‘ string ’形式的字被特殊处理。该字扩展为string,并按照ANSI C标准的规定替换反斜杠转义字符。如果存在反斜杠转义序列,则按以下方式解码。
**\a** alert (bell) **\b** backspace **\e**** \E **an escape character** \f **form feed** \n **new line** \r **carriage return** \t **horizontal tab** \v **vertical tab** \ **backslash**
扩展的结果是单引号,就像美元符号没有出现一样。
一个双引号的字符串,如果前面有美元符号 ( **$"** _string_ **"** ) ,会导致该字符串根据当前的语言环境进行翻译。如果当前的locale是**C**或**POSIX**,美元符号将被忽略。如果字符串被翻译和替换,替换的内容会被双引号。 **single quote** \" **double quote** \**_nnn_ the eight-bit character whose value is the octal value _nnn_ (one to three digits)**\x**_HH_ the eight-bit character whose value is the hexadecimal value _HH_ (one or two hex digits)**\u**_HHHH_ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _HHHH_ (one to four hex digits)**\U**_HHHHHHHH_ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _HHHHHHHH_ (one to eight hex digits)**\c**_x_ a control-_x_ character
扩展的结果是单引号,就像美元符号没有出现一样。
一个双引号的字符串,如果前面有美元符号 ( $” string “ ) ,会导致该字符串根据当前的语言环境进行翻译。如果当前的locale是C或POSIX,美元符号将被忽略。如果字符串被翻译和替换,替换的内容会被双引号。