今天我遇到了这个:
$ echo $'foo\\n'
foo\n
$ echo 'foo\\n'
foo\\n
我以前从未遇到过这种情况,也从未听任何人提到过这种情况。我原本以为$
字符串之外会导致该字符串被视为变量名。这在哪里有记录,并且一直都是这样吗?
答案1
这是 bash 的 ANSI-C 引用
形式为 的词
$'string'
被特殊处理。该词扩展为细绳,使用反斜杠转义字符替换,如 ANSI C 标准所指定。如果存在反斜杠转义序列,则按如下方式解码:
这里有记录https://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting