为什么 var= " " ;[ -n $var ] && echo T ||回声 F 返回 F?

  • 本文关键字:var echo 回声 返回 bash
  • 更新时间 :
  • 英文 :


我找到了以下命令:

var=""; [ -n $var ] && echo T || echo F

此命令返回 F。在我的理解中,$var是空的,因此命令应返回 T。

我还检查了这个:

[ -n "" ] && echo T || echo F

这如我预期的那样返回 T。

我不明白为什么

[ -n "" ] && echo T || echo F

返回 T 但

var="" [ -n $var ] && echo T || echo F

返回 F?

我在 CentOS6.4 bash4.1.2 上检查了它们

执行摘要:始终引用您的参数扩展,除非您知道为什么不应该引用它。请改用[ -n "$var" ]


当未引用时,

[ -n $var ]

扩展到

[ -n ]

也就是说,空字符串从输入中删除,bash只剩下对[的单参数调用,这意味着如果参数为非空,则该命令返回 true。 -n这里不是运算符;它只是一个非空字符串。

您需要引用参数扩展,以便

[ -n "$var" ]

扩展到

[ -n "" ]

这是对 [ 的双参数调用,它将按您的预期执行:测试第二个参数是否具有非零长度。

使用变量时输出的这种差异是你没有引用该变量。

当你说:

[ -n $var ] && echo T || echo F

命令行管理程序将其读取为:

'[' -n ']'

并返回T . 这种情况相当于说[ foo ]永远是正确的。

另一方面,当你说:

[ -n "" ] && echo T || echo F

命令行管理程序将其读取为:

'[' -n '' ']'

并返回F.

相关内容

  • 没有找到相关文章