bash 脚本中的以下行:
$GEN_SDK $GEN_SDK_FLAGS $OUT_DIR/toolchain || panic "Cannot generate SDK toolchain!"
执行时会崩溃。我相信这一行的逻辑是,如果第一个命令运行正常,则不会评估第二个命令。但是第一个命令运行正常意味着什么?return true
在 bash 中没有这样的事情。那么它如何知道它没有运行正常?
答案1
在 shell 中,所有进程都有退出代码(或返回代码)。退出代码0
是“真实的”,因为它指示没有发生错误(这与人们通常在编程语言中所期望的通常是0
“虚假的”相反)。如果 的退出代码不是,则bash 结构command || othercommand
将执行。这与当且仅当退出代码为othercommand
command
0
command && othercommand
othercommand
command
是 0
。
如果您想尝试一下,shell 扩展$?
将计算为上一个命令的退出代码:
$ true; echo $?
0
$ false; echo $?
1
$ true || echo "Darned true."
$ false || echo "Lies."
Lies.