使用字符串外的$字符进行Bash回显

爱国者*_*爱国者 2 linux bash echo

任何人都可以解释有什么区别

echo $"Starting $CMD" 
Run Code Online (Sandbox Code Playgroud)

echo "String $CMD"
Run Code Online (Sandbox Code Playgroud)

他们似乎看起来一样.

lar*_*sks 6

查看手册页的QUOTING部分bash:

表格的字$'string'是特别对待的.单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符.反斜杠转义序列(如果存在)按如下方式解码:

  • 警报(铃声)
  • \ b退格
  • \ e逃脱角色
  • \ f表格饲料
  • \n新行
  • \ r \n回车
  • \ t水平标签
  • \ v垂直标签
  • \反斜杠
  • 单引号
  • \nnn八位字符,其值为八进制值nnn(一到三位数)
  • \ xHH八位字符,其值为十六进制值HH(一个或两个十六进制数字)
  • \ cx是control-x字符

扩展结果是单引号,好像美元符号不存在一样.

并注意以下描述双引号字符串前面带$($"string"):

带有美元符号($)的双引号字符串将导致根据当前语言环境转换字符串.如果当前区域设置为C或POSIX,则忽略美元符号.如果翻译并替换字符串,则替换为双引号.