~$ echo $'\'test'
'test
man bash
说:
将字符括在单引号中可保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。
那么为什么它在-command中起作用呢echo
?
答案1
单引号'...'
与美元单引号不同$'...'
。前者不支持任何反斜杠,而后者使用 ANSI C 规范。
答案2
choroba
的回答完全正确,详情如下man bash
:
形式为 $'string' 的单词被特殊处理。该单词扩展为 字符串,按照 ANSI C 的规定替换反斜杠转义字符 标准。如果存在反斜杠转义序列,则按如下方式解码: \a 警报(铃声) \b 退格 \e \E 转义字符 \f 换页符 \n 新行 \r 回车 \t 水平制表符 \v 垂直制表符 \\ 反斜杠 \' 单引号 \" 双引号 \? 问号 \nnn 八位字符,其值为八进制值 nnn(一至三位数) \xHH 八位字符,其值为十六进制 值 HH (一个或两个十六进制数字) \uHHHH Unicode(ISO/IEC 10646)字符,其值为 十六进制值 HHHH (一至四位十六进制数字) \呃呃呃 Unicode(ISO/IEC 10646)字符,其值为 十六进制值 HHHHHHHH (一至八个十六进制数字) \cx 控制 x 字符
这就是为什么!