该语句的含义 - test -x /usr/bin/find ||出口0

该语句的含义 - test -x /usr/bin/find ||出口0

我只是想了解以下陈述的含义以及它们是否正确。

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 1exit代替它会更好。使用掩码的退出状态(这将是非零),并防止该脚本的调用者收到在给定位置查找失败的通知。exit 0find/usr/binexit 0testfind

与以下事实相关:当在 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在本例中)未执行,脚本继续执行。

相关内容