在检查返回码时,-d如何在if语句中工作?

时间:2017-03-31 11:33:10

标签: bash shell

我可以在bash脚本中使用一些代码让我感到困惑。

代码检查目录/文件是否存在。如果返回码为0 ...成功,否则该文件不存在:

if [ -d /usr/local/bin ]
then
    echo "Exists"
else
    echo "Does not exist"
fi

-d /usr/local/bin用什么程序检查文件是否存在?书中的另一个例子是:

test -d /usr/local/bin

if [ "$?" -eq 0 ]
then
    echo "Exists"
else
    echo "Does not exist"
fi

这让我相信我们在test中使用if的第一个例子。如果是这样,为什么这会自动发生而无需指定test程序?

1 个答案:

答案 0 :(得分:2)

方括号是不是 shell语法的一部分。相反,[是一个命令,其奇怪的特征是要求其最后一个参数为文字字符串]。您正在执行的命令是[,其中包含4个参数N-eq0],其中N是shell变量?目前扩展为(可能是01)。在过去,/bin/[通常是与/bin/test相同的文件的链接,并且当通过该链接调用该可执行文件时,该可执行文件的行为略有不同(它检查了最后一个参数是{{1} })。除了检查最后一个参数之外,]与命令[完全相同。

如果第二个例子没有明确地检查test,而是简单地写了,那么可能会更清楚:

$?