来自 bash 手册
该形式的单词
$'string'
经过特殊处理。该单词扩展为字符串,并按照 ANSI C 标准指定的方式替换反斜杠转义字符前面带有美元符号 ('$') 的双引号字符串将导致根据当前区域设置翻译该字符串。如果当前语言环境是 C 或 POSIX,则忽略美元符号。如果字符串被翻译并替换,则替换内容将被双引号括起来。
我想知道什么时候会发生这种扩展?
我想它们一定是在解析之后发生的。如果这是正确的,那么它们何时发生在 shell 扩展(例如大括号扩展、参数扩展和文件名扩展)方面?
谢谢。
答案1
$'...'
与任何其他引用一样工作,只是它只是提供了呈现某些字符的替代方式。
这些都打印{foo,bar}
:
echo $'\x7b'foo,bar}
echo "{"foo,bar}
...这会触发大括号扩展并打印foo bar
:
echo {foo,bar}
鉴于foo=abc
,这些打印$foo
:
echo $'\x24'foo
echo "$"foo
...这会扩展变量并打印abc
:
echo $foo
如果有一个名为 的文件abc.txt
,则会打印abc.txt
:
echo "a"*.txt
echo $'\x61'*.txt
我只能假设 也是如此$".."
。