双引号内的单引号和 Bash 参考手册

Lav*_*vya 22 shell bash quoting

在标题为双引号的 3.1.2.3 节中,Bash 手册说:

用双引号 ('"') 将字符括起来会保留引号内所有字符的字面值,但 '$'、'`'、'\' 和启用历史扩展时的 '!' 除外。

目前我关心的是单引号( ')。

它的特殊含义,在上一节中描述,3.1.2.2节是:

将字符括在单引号 ( ') 中会保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。

结合两场展览,

 echo "'$a'"
Run Code Online (Sandbox Code Playgroud)

其中变量a未定义(因此$a= 空字符串),应该打印$a在屏幕上,因为'',在内部具有特殊含义,将屏蔽$特殊解释。相反,它打印''. 为什么这样?

Ant*_*hon 24

'您的echo示例中的单引号字符获取它的字面值(并失去其含义),因为它包含在双引号 ( ") 中。封闭字符是双引号。

您可以做的是单独打印单引号:

echo "'"'$a'"'"
Run Code Online (Sandbox Code Playgroud)

或逃避$

echo "'\$a'"
Run Code Online (Sandbox Code Playgroud)

  • 手册中提到的第二个字符是反引号而不是波浪号。 (4认同)

Hau*_*ing 6

你误解了文档:

在里面有它的特殊含义,将保护 $ 免受特殊解释

“有其特殊意义”意味着它特别解释而不是按字面意思解释。单引号防止$被扩展。但是双引号中的单引号是文字字符,即它们不影响任何东西。如果你想要输出,$a那么你需要echo '$a'.