在Bash中,单引号(''
)和双引号(""
)之间有什么区别?
单引号不会插值,但双引号会插值。例如:变量,反引号,某些\
转义符等。
例子:
$ echo "$(echo "upg")"
upg
$ echo '$(echo "upg")'
$(echo "upg")
Bash手册说:
将字符括在单引号(
'
)中可保留引号内每个字符的字面值。即使在单引号之前加反斜杠,也不能在单引号之间引起单引号。在双引号包围字符(
"
)保留了引号中的所有字符的字面意义,例外$
,`
,\
,和,启用了历史扩展的时候,!
。字符$
和`
双引号中保留其特殊含义(请参见Shell Expansions)。反斜杠后跟当由下列字符只保留它的特殊含义:$
,`
,"
,\
,或换行符。在双引号中,将删除反斜杠,后跟这些字符之一。没有特殊含义的反斜杠前面的字符将保持不变。双引号可以在双引号内加上反斜杠。如果启用,将执行历史记录扩展,除非!
使用反斜杠将双引号引起来。之前的反斜杠!
不会被删除。特殊参数
*
和@
在双引号中具有特殊含义(请参阅Shell参数扩展)。
对于任何不知道“插值”意味着什么的人:en.wikipedia.org/wiki/String_interpolation
怎么样,当你使用的是
git_prompt
他们建议使用它像这样的混帐提供PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
, git的提示,根据本不应该工作。PS#
变量有什么特别之处吗?或为什么它不执行插值就起作用。@ekiim准确的文本被设置(不变)为
PS1
。试着echo $PS1
明白我的意思。但是PS1
会在显示之前进行评估(请参见PROMPTING
bash手册页中的部分)。要对此进行测试,请尝试PS1='$X'
。您将没有提示。然后运行X=foo
,突然您的提示是“ foo”(设置而不是显示PS1
时已被评估,您仍然没有提示)。