我只是想了解以下陈述的含义以及它们是否正确。
test -x /usr/bin/find || exit 0
Command 1
Command 2
Command 3
的输出test -x /usr/bin/find
始终为 0。这意味着将执行 exit 0 命令,这意味着命令 1、2、3 将永远不会被执行。我在这儿吗?
答案1
test -x /usr/bin/find
(或[ -x /usr/bin/find ]
) 不输出任何内容。测试将是真的如果/usr/bin/find
是现有的可执行文件,并且错误的如果路径名不存在,或者不可执行。
如果test
成功退出(退出状态为零,表示“无错误”),shell 将执行其余命令。如果它退出失败(非零退出状态,表示“某些错误”),exit 0
将终止当前 shell,阻止其余命令运行。
可以说,当无法找到时,使用exit 1
或exit
代替它会更好。使用掩码的退出状态(这将是非零),并防止该脚本的调用者收到在给定位置查找失败的通知。exit 0
find
/usr/bin
exit 0
test
find
与以下事实相关:当在 shell 中测试为布尔值时,退出状态为零的计算结果为“true”:
与使用相关||
并且&&
一般而言:
答案2
不,他们总会被处决。其中man bash
说(它在每个 POSIX shell 中的工作方式类似):
An OR list has the form
command1 || command2
command2 is executed if, and only if, command1 returns a non-zero exit
status.
由于test -x /usr/bin/find
返回 0,command2(exit 0
在本例中)未执行,脚本继续执行。