3.3.1. Why?

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

3.3.2. 转义字符

转义字符用于从单个字符中删除特殊含义。未加引号的反斜杠 \ 用作 Bash 中的转义字符。它保留后面的下一个字符的文字值,但换行符除外。如果换行符紧跟在反斜杠之后,当它比终端的宽度长时,它标志着一行的继续;反斜杠从输入流中删除并被忽略。

  1. franky ~> date=20021226
  2. franky ~> echo $date
  3. 20021226
  4. franky ~> echo \$date
  5. $date

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

3.3.3.单引号

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

我们继续前面的例子:

  1. franky ~> echo '$date'
  2. $date

3.3.4. 双引号

使用双引号会保留所有包含的字符的文字值,但美元符号、反引号(反向单引号、``)和反斜杠除外。

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

反斜杠只有在后面跟着美元、反引号、双引号、反斜杠或换行符时才保留其含义。在双引号内,反斜杠后跟这些字符之一时,将从输入流中删除。没有特殊含义的字符前面的反斜杠不作修改,以供 shell 解释器处理。

双引号可以用反斜杠在双引号中引用。

  1. franky ~> echo "$date"
  2. 20021226
  3. franky ~> echo "`date`"
  4. Sun Apr 20 11:22:06 CEST 2003
  5. franky ~> echo "I'd say: \"Go for it!\""
  6. I'd say: "Go for it!"
  7. franky ~> echo "\"
  8. More input>"
  9. franky ~> echo "\\"
  10. \

3.3.5. ANSI-C

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

3.3.6. 语言环境

前面有美元符号的双引号字符串将导致字符串根据当前语言环境进行翻译。如果当前语言环境是”C”或”POSIX”,则忽略美元符号。如果字符串被翻译和替换,则替换双引号。

https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html