我可以在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
程序?
答案 0 :(得分:2)
方括号是不是 shell语法的一部分。相反,[
是一个命令,其奇怪的特征是要求其最后一个参数为文字字符串]
。您正在执行的命令是[
,其中包含4个参数N
,-eq
,0
和]
,其中N
是shell变量?
目前扩展为(可能是0
或1
)。在过去,/bin/[
通常是与/bin/test
相同的文件的链接,并且当通过该链接调用该可执行文件时,该可执行文件的行为略有不同(它检查了最后一个参数是{{1} })。除了检查最后一个参数之外,]
与命令[
完全相同。
如果第二个例子没有明确地检查test
,而是简单地写了,那么可能会更清楚:
$?