正如这里所说,该命令[ -d FILE ]
用于检查文件是否为目录。
但是,当我们错过FILE
表达式中的参数时,它仍然返回 true。
为什么?那么shell如何解释这个表达式呢?
示例应该足够简单:)
$ [ -d /tmp ]
$ echo $? # prints 0
$ [ -d ]
$ echo $? # why prints 0 as well?
-d
[
如果接收到 2 个参数,则仅将其视为运算符。[ -d
] 是[
命令的单参数形式,如果其单参数为非空,则以 0 退出。由于-d
是一个非空字符串,它退出 0。
[ -d "" ]
另一方面,它是[
命令的双参数形式,带有两个参数“-d”和“”。现在第一个参数被视为作用于第二个参数的主要运算符。
它被解释为[ -n -d ]
. 换句话说,由于您只提供了一个参数-d
,因此它被视为任何其他字符串,并且您可以在手册页中阅读:
-n STRING
的长度STRING
非零
STRING
相当于-n STRING