我刚刚在初始化脚本中看到了这一点:
echo $"Stopping Apache"
那个美元符号是做什么用的?
到目前为止我的研究:
我在 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
答案1
答案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
$
注意:在其他 shell 中,您可能会得到不同的结果,因为echo
可能在没有提供选项的情况下解释转义序列。
答案3
你误解了手册。仅当使用 $ 引号的字符串时,您才会看到效果里面一个${parameter}
扩展。
$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd
来源和进一步阅读:https://lists.gnu.org/archive/html/bug-bash/2005-10/msg00017.html