这个问题在这里已有答案:
我想知道下面的代码是否有错误的语法?
#!/bin/bash
set -e
let "time_used = 1 - 1"
echo $time_used
当我运行它时,没有任何打印。剧本在let "time_used = 1 - 1"
死了。
如果我在第二行删除set -e
,我得到正确的结果0
。
为什么会这样?
let是shell算术的bash built-in
let "time_used = 1 - 1"
相当于
(( time_used = 1 - 1 ))
但是shell算术中的0表示false并给出错误退出状态以避免退出-e
|| true
可以在命令后添加
(( 0 )) || true
let "time_used = 1 - 1" || true
|| true
允许为命令返回错误退出状态“绕过”-e
选项,但是我们无法区分失败的命令和返回错误退出状态的命令。其他选项可以是使用算术来返回始终的真值。
(( (time_used = 1 - 1) || 1))
因为let
返回1
,如果它的结果是相同的0
。在其他情况下,它返回0
。
$ help let | tail -n2退出状态:如果最后一个ARG的计算结果为0,则返回1;让我们返回0。