shell:为什么[-d]返回true而不是false?

时间:2013-05-08 14:38:42

标签: shell

如告诉here,命令[ -d FILE ]用于检查文件是否是目录。

但是,当我们错过表达式中的FILE参数时,它仍然返回true。

为什么呢? shell如何解释这个表达式?

示例应该足够简单:)

$ [ -d /tmp ]
$ echo $?          # prints 0
$ [ -d ]
$ echo $?          # why prints 0 as well?

2 个答案:

答案 0 :(得分:5)

如果-d收到2个参数,则

[仅被视为运算符。 [ -d]是[命令的单参数形式,如果其单个参数为非null,则以0退出。由于-d是非空字符串,因此它将退出0.

另一方面,

[ -d "" ][命令的两参数形式,带有两个参数“-d”和“”。现在,第一个参数被视为对第二个参数起作用的主操作符。

答案 1 :(得分:3)

它被解释为[ -n -d ]。换句话说,因为您只提供了一个参数-d被视为任何其他字符串,并且您可以在the man page中阅读:

  

-n STRING
    STRING的长度为非零

     

STRING
      相当于-n STRING

相关问题