命令行(bash)上 ' 和 " 之间的区别?

命令行(bash)上 ' 和 " 之间的区别?

我曾经在命令行上互换使用''and (单引号和双引号),但最近我注意到 ' ' 没有扩展,而 ' ' 是。我搜索了一下,发现允许""'$HOME/some/dir'"$HOME/some/dir"""一些保护特殊字符,同时''允许全面保护。那么还有哪些其他字符受到保护'',哪些不受到保护呢""

编辑:什么是实际的在什么情况下这些差异可能很显着?

答案1

查看 bash 手册页。有一整节都是关于引用的。因为这是根据 GFDL 授权的,与此处使用的 CC-BY-SA 许可证不兼容,所以我不会引用整个内容,但实际上阅读这就是最明确的答案

总之,单引号停止所有解释——字符串按字面意思呈现。当后跟某些其他字符时,双引号将$(美元符号)、`(反引号)保留为特殊,将(反斜杠)保留为特殊。如果启用了历史扩展功能(默认情况下),则会受到特殊对待\!

在实际使用中,这$是一件大事,因为人们通常可能希望它能够实现各种扩展(变量等),同时仍然防止 shell 混淆大部分命令行。

答案2

虽然单引号保留它们所包含的所有字符的字面值,

双引号的不同之处在于它们不保留美元符号 $、反引号 - - 和反斜杠 , 的字面值。

当用双引号引起来时,美元符号和反引号保留其特殊含义,而反斜杠字符的特殊含义只有当它位于美元符号、反引号、双引号、反斜杠或换行符之前时才保留。

例子:

[user@localhost~]$ echo '$HOME'
$HOME
[user@localhost~]$ echo '`pwd`'
`pwd`
[user@localhost~]$ echo '"Hello world"'
"Hello world"

[user@localhost~]$ echo "$HOME"
/home/user
[user@localhost~]$ echo "`pwd`"
/home/user

[user@localhost~]$ echo ""Hello world""
Hello world
[user@localhost~]$ echo "\$HOME"
$HOME
[user@localhost~]$ echo "\`pwd\`"
`pwd`
[user@localhost~]$ echo "\"Hello ,world\""
"Hello, world"

相关内容