如告诉here,命令[ -d FILE ]
用于检查文件是否是目录。
但是,当我们错过表达式中的FILE
参数时,它仍然返回true。
为什么呢? shell如何解释这个表达式?
示例应该足够简单:)
$ [ -d /tmp ]
$ echo $? # prints 0
$ [ -d ]
$ echo $? # why prints 0 as well?
答案 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