什么时候应该在布尔条件中用引号推送变量?

以下两个布尔表达式是否相同?

if [ -n $1 ] ; then if [ -n "$1" ] ; then 

如果不是 – 你什么时候应该在引号中加一个变量?

这是一个应该certificate差异的例子

 ~$ t="alfa beta" ~$ if [ -n $t ] ; then echo OK ; fi bash: [: alfa: binary operator expected ~$ if [ -n "$t" ] ; then echo OK ; fi OK ~$ ls blah* blah1 blah2 blah3 ~$ t="blah*" ~$ if [ -n "$t" ] ; then echo OK ; fi OK ~$ if [ -n $t ] ; then echo OK ; fi bash: [: too many arguments 

换句话说,使用引号, $t只展开一次并作为单个参数放入引号进行test[只是test的别名)。 如果没有引号,它将被$t的内容替换,然后再次展开

在与[相同]的test条件中,您应该始终使用双引号,否则如果变量为空或未定义,则test命令可能会错过参数,或者如果变量包含空格,则参数太多。 但是,在bash ,使用内置[[对于不需要引号的条件]更安全。