仅当变量的先前值为零时,以下带有调试选项“set -e -v”的脚本才会在增量运算符处失败。
#!/bin/bash
set -e -v
i=1; let i++; echo "I am still here"
i=0; let i++; echo "I am still here"
i=0; ((i++)); echo "I am still here"
bash(GNU bash,版本 4.0.33(1)-release (x86_64-apple-darwin10),还有 GNU bash,版本 4.2.4(1)-release (x86_64-unknown-linux-gnu))
有任何想法吗?
我的问题的答案是不使用let (or shift,或...)但要使用
i=$((i+1))
当尝试通过设置 ' 检查 bash 脚本时以非零状态码退出' with
set -e
bash 手册指出set -e具有以下效果:如果简单命令以非零状态退出,则立即退出。'.
很遗憾let (and shift和...)返回计算结果('如果最后一个参数的值为 0,则 let 返回 1;否则返回 0')。因此,我们得到的是某种返回值,而不是状态代码。有时这个返回值为零,有时为一,具体取决于计算。因此 set -e 将导致脚本退出,具体取决于您的计算结果!除非你不使用它或者诉诸于它,否则没有什么可做的
let i++ || true
正如 arnaud576875 所指出的,顺便说一句,这增加了额外的 CPU 负担。
Using
let ++i
仅适用于 i 不为 -1 的特定情况,如let i++仅当 i 不为 0 时才有效。因此是半解。
虽然我喜欢 Unix,但我别无选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)