在 Bash 中,单引号 ('') 和双引号 (\'\') 有什么区别?
) 和双引号 ( ''
) ""
有什么区别
单引号不会插入任何内容,但双引号会。例如:变量、反引号、某些 \
转义符等。
例子:
$ echo "$(echo "upg")"
upg
$ echo '$(echo "upg")'
$(echo "upg")
Bash 手册中有这样的说法:
3.1.2.2 单引号
将字符括在单引号 (
'
) 中可保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。3.1.2.3 双引号
将字符括在双引号 (
"
) 中会保留引号内所有字符的文字值,但 、 和 除外$
,`
,\
(当启用历史扩展时)!
。字符$
和`
在双引号内保留其特殊含义(请参阅 Shell 扩展 )。反斜杠仅在后跟以下字符之一时才保留其特殊含义:$
,`
,"
,\
、 或换行符。在双引号中,后跟以下字符之一的反斜杠将被删除。前面没有特殊含义的字符的反斜杠保持不变。可以在双引号内通过在双引号前面加上反斜杠来引用双引号。如果启用,则将执行历史扩展,除非!
使用反斜杠对双引号中出现的 进行转义。 前面的反斜杠!
不会被删除。特殊参数
*
和@
在双引号中具有特殊含义(参见 Shell 参数扩展 )。