我想知道下面的代码是否有错误的语法?
#!/bin/bash
set -e
let "time_used = 1 - 1"
echo $time_used
当我运行它时,没有任何打印。该脚本在let "time_used = 1 - 1"
上死亡。
如果我在第二行删除set -e
,我会得到正确的结果0
。
为什么会这样?
答案 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))