<分区>
我想知道下面的代码是否有语法错误?
#!/bin/bash
set -e
let "time_used = 1 - 1"
echo $time_used
当我运行它时,没有任何打印。脚本死于 let "time_used = 1 - 1"
。
如果我在第二行删除 set -e
,我会得到正确的结果 0
。
为什么会这样?
标签 bash
<分区>
我想知道下面的代码是否有语法错误?
#!/bin/bash
set -e
let "time_used = 1 - 1"
echo $time_used
当我运行它时,没有任何打印。脚本死于 let "time_used = 1 - 1"
。
如果我在第二行删除 set -e
,我会得到正确的结果 0
。
为什么会这样?
最佳答案
我们是一个bash built-in用于 shell 算术
let "time_used = 1 - 1"
相当于
(( time_used = 1 - 1 ))
然而 0 在 shell 算术中表示错误并给出错误退出状态以避免使用 -e
|| 退出true
可以在命令后添加
(( 0 )) || true
let "time_used = 1 - 1" || true
|| true
允许为返回错误退出状态的命令“绕过”-e
选项,但是我们无法区分失败的命令和返回错误退出状态的命令。其他选项可以是使用算术来始终返回真值。
(( (time_used = 1 - 1) || 1))
关于bash - bash中 'let'的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47989653/