在脚本中使用 $"dollarsign-prefixed string" 是什么意思?

Ed *_*nin 103 scripting bash shell-script quoting

我刚刚在初始化脚本中看到了这一点:

echo $"Stopping Apache"
Run Code Online (Sandbox Code Playgroud)

那个美元符号是干什么用的?

到目前为止我的研究:

我在 bash 手册中找到了这个:

引述

如果设置,$'string'并且在双引号括起来的扩展中$"string"执行${parameter}引用。默认情况下启用此选项。

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

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD
Run Code Online (Sandbox Code Playgroud)

jw0*_*013 134

这里有两件不同的事情,都记录在bash手册中

$'

美元符号单引号是一种特殊的引用形式:

ANSI C 引用

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

$"

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

语言环境翻译

以美元符号 ('$') 开头的双引号字符串将使该字符串根据当前语言环境进行翻译。如果当前语言环境是 C 或 POSIX,则忽略美元符号。如果字符串被翻译和替换,则替换是双引号。


jor*_*anm 31

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

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.
Run Code Online (Sandbox Code Playgroud)

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

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

$ 
Run Code Online (Sandbox Code Playgroud)

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

  • 根据问题,没有提到`$"..."`。 (12认同)