bash中'let'的奇怪错误

时间:2017-12-27 09:35:35

标签: bash

我想知道下面的代码是否有错误的语法?

#!/bin/bash
set -e
let "time_used = 1 - 1"
echo $time_used

当我运行它时,没有任何打印。该脚本在let "time_used = 1 - 1"上死亡。

如果我在第二行删除set -e,我会得到正确的结果0

为什么会这样?

2 个答案:

答案 0 :(得分:2)

如果let的结果等于1,则0会返回0。 在其他情况下,它返回{{1}}。

  

$ help let |尾巴-n2       退出状态:       如果最后一个ARG的计算结果为0,则返回1;让我们返回0。

答案 1 :(得分:2)

let是bash built-in for shell arithmentic

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))