首页 > 解决方案 > 测试部分的 Bash 退出代码不应为 0

问题描述

为什么这个 bash 脚本返回退出代码 0?

$ if [ $NonExistent != "something" ]; then echo good; fi; echo $?
-bash: [: !=: unary operator expected
0

我试过把脚本放在一个文件中并添加

set -e
set -o pipefail

但它仍然返回 0。假设我不能修改这个脚本并且只能调用它,有没有办法我可以知道脚本失败了?

标签: bash

解决方案


它返回 0 因为

https://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs

if

[...]

返回状态是最后执行的命令的退出状态,如果没有条件测试为 true ,则返回零

至于知道脚本失败:“失败”到底是什么意思?它成功运行。

good如果您想知道条件是否为真,您可以测试输出是否以开头。


推荐阅读