Raf*_*sin 11 bash echo quoting
我试图使用执行新行echo
并尝试执行以下两个命令:
第一条命令:
echo $'Hello World\nThis is a new line'
Run Code Online (Sandbox Code Playgroud)
回复:
Hello World
This is a new line
Run Code Online (Sandbox Code Playgroud)第二个命令:
echo $"Hello World\nThis is a new line"
Run Code Online (Sandbox Code Playgroud)
回复:
Hello World\nThis is a new line
Run Code Online (Sandbox Code Playgroud)我的问题是$' '
用$" "
in包裹的字符串与用bash
's包裹的字符串有什么区别echo
?
将$
在字符串中的开头:
echo $'Hello World\nThis is a new line'
Run Code Online (Sandbox Code Playgroud)
导致转义序列被解释。
Bash 参考手册[ 说 ]
$'string' 形式的词被特殊处理。单词扩展为字符串,并按照 ANSI C 标准的规定替换反斜杠转义字符。..
..
扩展结果是单引号的,就好像美元符号不存在一样。
但
echo $"Hello World\nThis is a new line"
Run Code Online (Sandbox Code Playgroud)
是完全不同的。这[文章]上设置特定的翻译说:
以美元符号 ('$') 开头的双引号字符串将使该字符串根据当前语言环境进行翻译。如果当前语言环境是 C 或 POSIX,则忽略美元符号。如果字符串被翻译和替换,则替换是双引号。
注: IIRC都$'string'
和$"string"
可能无法找到不同的炮弹的支持。来自其他 shell 的人不仅会好奇地看着它们,而且还会争论是否可以为了脚本可移植性而避免这种情况。