如果结果为零,为什么bash计算返回1

时间:2016-12-16 14:31:04

标签: bash

我正在bash中进行简单的计算,我注意到如果计算结果为零,使用expr的bash计算会返回 1

user@machine:~$ expr 42 - 40 ; echo $?
2
0

user@machine:~$ expr 42 - 84 ; echo $?
-42
0

user@machine:~$ expr 42 - 42 ; echo $?
0
1

为什么bash这样做? 1 的返回值是否表示程序失败?这种行为不违反良好做法吗?

我在使用set -e的脚本运行中进行了一些计算。 考虑1的返回值的最佳方法是什么? 我能做到

expr $var1 - $var2 || true

但是这也会忽略除 1 之外的其他退出代码。

1 个答案:

答案 0 :(得分:1)

这只是整数(如布尔值,0 = False,1 = True)到shell退出代码(0 =成功,> 0 =失败)的映射。请注意"失败"并不一定意味着"程序遇到错误和/或崩溃"。其他程序做类似的事情:

 <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
    <form class="form">
    <input id="check_1" type="checkbox"/><label class="fa" for="check_1"></label>
          <input id="check_2" type="checkbox"/><label class="fa" for="check_2"></label>
    <input id="check_3" type="checkbox"/><label class="fa" for="check_3"></label>

    </form>

在C中,您可以直接使用算术表达式的结果作为* `grep` exits with 0 if a match is made, 1 if no match is made. * `test` exits 0 if its condition is true, 1 if its condition is false. if语句的条件。

在shell中,这样的语句测试命令的退出代码,将成功视为类似于true,将失败视为类似于false。从这个意义上说,whileexpr ...的缩写。

在典型的语言中,您可以编写类似

的内容
test ... -ne 0

# Python n = 10 while n - 3: # short for n > 3 ... 执行算术运算,因此退出状态允许相同。

expr

请注意,通过检查n=10 while expr "$n" - 3; do ... done 的退出状态是否大于1,您仍然可以检测实际错误,而不是布尔错误。

expr