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

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

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

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

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

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

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

结合这两个论述,

 echo "'$a'"

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

答案1

'示例中的单引号字符会echo获取其字面值(并失去其含义),因为它用双引号 ( ") 括起来。括起来的字符是双引号。

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

echo "'"'$a'"'"

或逃避$

echo "'\$a'"

答案2

您误解了文档:

里面有特殊含义,可以保护 $ 免受特殊解释

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

相关内容