我想知道下面的代码是否有错误的语法?
#!/bin/bash
set -e
let "time_used = 1 - 1"
echo $time_used
Run Code Online (Sandbox Code Playgroud)
当我运行它时,没有打印任何内容。剧本死了let "time_used = 1 - 1"。
如果我set -e在第二行删除,我会得到正确的结果0。
为什么会发生?
let 是shell 算法的内置 bash
let "time_used = 1 - 1"
Run Code Online (Sandbox Code Playgroud)
相当于
(( time_used = 1 - 1 ))
Run Code Online (Sandbox Code Playgroud)
然而,shell 算术中的 0 表示 false 并给出错误退出状态以避免退出,-e || true可以在命令后添加
(( 0 )) || true
let "time_used = 1 - 1" || true
Run Code Online (Sandbox Code Playgroud)
|| true允许-e为返回错误退出状态的命令“绕过”选项,但是我们无法区分失败的命令和返回错误退出状态的命令。其他选项可以是使用算术来始终返回一个真值。
(( (time_used = 1 - 1) || 1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |