bash - bash中 'let'的奇怪错误

标签 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/

相关文章:

bash - 使用 shell 脚本将来自 telnet 的 SMTP session 保存在日志中

bash - 如何将每个 "set -x"日志捕获到系统日志?

bash - 使用 mkfifo 和传输流,这可能吗?

linux - 如何将某些符号(例如 "space")更改为 Bash/shell 中的其他符号

python - 如何从 Unicode 文件中删除字母数字单词

string - 带有额外空格的多行字符串(保留缩进)

regex - 检查字符串是否包含 Bash 中的斜杠或反斜杠?

在 virtualenv 中运行 jupyter notebook 的 bash 脚本

linux - 如何将 bash 文件本身复制到输出目录

linux - 如何让我的一个类轮脚本根据条件打印颜色?