1

正如这里所说,该命令[ -d FILE ]用于检查文件是否为目录。

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

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

示例应该足够简单:)

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

2 回答 2

5

-d[如果接收到 2 个参数,则仅将其视为运算符。[ -d] 是[命令的单参数形式,如果其单参数为非空,则以 0 退出。由于-d是一个非空字符串,它退出 0。

[ -d "" ]另一方面,它是[命令的双参数形式,带有两个参数“-d”和“”。现在第一个参数被视为作用于第二个参数的主要运算符。

于 2013-05-08T14:54:45.177 回答
3

它被解释为[ -n -d ]. 换句话说,由于您只提供了一个参数-d,因此它被视为任何其他字符串,并且您可以在手册页中阅读:

-n STRING
的长度STRING非零

STRING
相当于-n STRING

于 2013-05-08T14:55:19.417 回答