引用文字文字

本段中的所有示例都打印出该行

!"#$&'()*;<=>?  @[\]^`{|}~

反斜杠引用下一个字符,即按字面解释下一个字符。一个例外是换行符:反斜杠换行符扩展为空字符串。

echo \!\"\#\$\&\'\(\)\*\;\<\=\>\?\ \ \@\[\\\]\^\`\{\|\}\~

单引号(正向引号',也称为撇号)之间的所有文本都按字面打印。即使反斜杠代表自己,也不可能包含单引号; 相反,你可以停止文字字符串,包含带反斜杠的文字单引号,然后再次启动文字字符串。因此,4 字符序列'\''有效地允许在文字字符串中包括单引号。

echo '!"#$&'\''()*;<=>?  @[\]^`{|}~'
#          ^^^^

Dollar-single-quote 像许多其他编程语言一样启动字符串文字 $'…',其中反斜杠引用下一个字符。

echo $'!"#$&\'()*;<=>?  @[\\]^`{|}~'
#           ^^            ^^

双引号 " 分隔半文字字符串,其中只有字符 " \ $`保留其特殊含义。这些字符需要在它们之前使用反斜杠(请注意,如果反斜杠后跟其他字符,则反斜杠仍然存在)。当包含变量或命令替换时,双引号最有用。

echo "!\"#\$&'()*;<=>?  @[\\]^\`{|}~"
#      ^^                 ^^  ^^
echo "!\"#\$&'()*;<=>?  @[\]^\`{|}~"
#      ^^                 ^  ^^      \[ prints \[

交互式地,请注意 ! 触发双引号内的历史扩展:!oops 查找包含 oops 的旧命令; \!oops 不做历史扩张但保持反斜杠。这不会发生在脚本中。