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


18

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

用双引号('“')引起来的字符将保留所有引号内的字符的文字值,但'$','`','\'除外,并且在启用历史记录扩展时,会使用'!'。

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

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

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

结合两个论述,

 echo "'$a'"

其中a未定义变量(因此$a=空字符串),应$a在屏幕上打印,因为'',如果它在内部具有特殊含义,则可以避免$特殊解释。而是打印''。为什么这样?

Answers:


21

'您的echo示例中的单引号字符将其括在双引号(")中,得到了字面值(并失去了其含义)。封闭的字符是双引号。

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

echo "'"'$a'"'"

或逃脱$

echo "'\$a'"

哦,你是完全正确的!输出与您的答案一致,但我的疑问是“用双引号('“')括起字符保留了引号内所有字符的文字值,'$',' ’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde ("”)除外。我感谢您的快速回复,谢谢!
Lavya 2014年

2
手册中提到的第二个字符是反引号,而不是波浪号。
肯尼·埃维特

6

您误解了文档:

里面有特殊含义,会使$不受特殊解释

“具有其特殊含义”表示对它解释不是字面意义。单引号禁止$扩展。但是双引号中的单引号是文字字符,即它们不影响任何内容。如果要输出,$a则需要echo '$a'


你是对的。我不仅误解了文档,而且误解了(将“`”表示为“`”!)。您对“双引号中的单引号是文字字符”是正确的。谢谢!
Lavya 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.