在标题为“双引号”的 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'
.