bash中“let”的一个奇怪错误[重复]

问题描述 投票:2回答:2

这个问题在这里已有答案:

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

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

当我运行它时,没有任何打印。剧本在let "time_used = 1 - 1"死了。

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

为什么会这样?

bash
2个回答
2
投票

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

2
投票

因为let返回1,如果它的结果​​是相同的0。在其他情况下,它返回0

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

© www.soinside.com 2019 - 2024. All rights reserved.