例如
if [ "$FOO" = "true" ]; then
与
if [ $FOO = "true" ]; then
有什么不同?似乎这两个语句也都起作用。
在Bash中,请使用双方括号,并且您不需要引号,并且可以得到其他好处。
—
暂停,直到另行通知。
@DennisWilliamson不太完全,您确实需要在(in)等式和模式匹配运算符的右侧加引号。
—
吉尔(Gilles)'所以
@吉尔斯:有时候不行。对于包含空格的文字字符串,或者包含您想按字面意义使用的包含glob字符的文字字符串或变量,必须在右侧加上引号:
—
。暂停,直至另行通知
a='foo bar'; [[ $a == "foo bar" ]]
。但是,不包含全局字符的变量不必是:[[ $a == $a ]]
。在双方括号内不执行单词扩展。而对于正则表达式匹配,在右侧的图案不得引用或将被当作文字字符串:[[ $a =~ .*oo.*r ]]
(模式应该是在未引用变量,但是,而不是...
像这里一样被并入)。对于glob样式的模式匹配,无论字面值还是在变量中,都不能用引号引起来
—
暂停,直到另行通知。
[[ $a == foo* ]]
。除了我的文字字符串示例外,您能否提供其他报价要求示例?