击回声的$字符字符串
问题描述:
以外的任何人都可以解释什么是他们似乎看起来是一样的
echo $"Starting $CMD"
和
echo "String $CMD"
之间的差异。
答
$""
是一种用于语言翻译的引用形式。如果你用-D
标志调用bash,它将打印出所有这样的字符串。当区域设置为C
或POSIX
时,这种引用形式不会执行任何操作。
这些字符串被gettext
用来查找合适的翻译。例如,如果你的脚本有串$"Hello, World"
,你已经正确安装MO文件翻译该字符串到,比如说,法国,你可以执行你的脚本是这样的:
LANGUAGE=fr_FR ./yourscript
和期望的$"Hello, World"
所有实例是输出为Bonjour,Tout le Monde(假设这是您的翻译文件中的实际内容)。
翻译不是魔术或自动翻译,所以you must provide the translation engine with whatever translation strings it doesn't already have。
(PS - 我挂不提this security bug,但如果你撇去你可能会错过它,所以我选中它再次莅临指导。)
答
中查找bash
手册页的QUOTING
部分:
专门处理表格
$'string'
的单词。该字扩展为 字符串,反斜杠转义字符被替换为 ANSI C标准中指定的字符。反斜杠转义序列,如果存在的话,被译码为 如下:
- \一个警报(钟形)
- \ b退格
- 。\ E转义字符
- \ f换
- \ n新行
- \ r回车
- \ t水平标签
- \ v垂直的iCal标签
- \反斜杠
- \”单引号
- \ NNN的八位字符,其值是八进制值NNN(一到三位)
- \ XHH的八位字符,其值是十六进制值HH(一个或两个十六进制数字)
- \ CX控制-X字符
膨胀的结果是单引号,仿佛美元符号不在场。通过
$
之前($"string"
)
,并注意如下描述双引号中的字符串:
双引号字符串用一个美元符号($)开头将导致串 根据翻译当前的语言环境。如果当前区域设置为C 或POSIX,则忽略美元符号。如果翻译字符串并替换 ,则替换为双引号。
你能给我一些样品吗? – 2012-08-07 05:05:59
@爱国者编辑举例 – kojiro 2012-08-07 11:32:16
对不起,'LANGUAGE = fr_FR。/ myscrip.sh'会打印'Hello,world'。它需要为我的Linux做一些配置吗? – 2012-08-07 13:34:56