我只是在初始化脚本中看到了这一点:
echo $"Stopping Apache"

那美元符号是做什么用的? >
extquote

如果设置,则在双引号内的$'string'扩展内执行$"string"${parameter}报价。默认情况下,此选项处于启用状态。


...但是我没有发现带有和不带有$前缀的字符串之间的任何区别: />

#1 楼

bash手册中记录了两种不同的情况
$'
美元符号单引号是一种特殊的引号形式:
ANSI C引用

$'string'形式的单词经过特殊处理。该单词扩展为字符串,并按ANSI C标准的规定替换反斜杠转义的字符。

$“
美元符号双引号用于本地化:

双引号字符串前面加一个美元符号('$')将导致该字符串根据当前语言环境进行翻译。如果当前语言环境为C或POSIX,则忽略美元符号。如果字符串已翻译和替换,替换将被双引号。


#2 楼

当在$''内扩展字符串时,将解释转义序列。在联机帮助页上:

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.


一个简单的示例是换行符的\ n转义序列:

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 


注意:由于echo可能在不提供选项的情况下解释转义序列,因此在其他shell中可能会得到不同的结果。

评论


根据问题,没有提到$“ ...”。

– Peter.O
2012年9月14日7:05

#3 楼

您误解了手册。您只会在${parameter}扩展内的$引号字符串中看到一种效果。 /archive/html/bug-bash/2005-10/msg00017.html

评论


这不能回答问题:$“…”是不同的东西。

–吉尔斯'所以-不再是邪恶的'
2012年9月13日23:55

抱歉,您的答案是错误的:无需使用$ {}扩展来使用ANSI引用。检查自己:echo $'ab \ ncd'

–rozcietrzewiacz
2012年9月14日在7:04

我认为这个答案试图错误地解释引号,而不是问题在问什么。

– jw013
2012年9月14日14:48



“ $ {...}”与$“ ...”不同

–吉普赛宇航员
17年7月27日在22:13