gpt4 book ai didi

bash set -e and i=0;让i++不同意

转载 作者:行者123 更新时间:2023-11-29 08:48:56 25 4
gpt4 key购买 nike

仅当变量的先验值为零时,以下带有调试选项“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(或shift,或...)而是使用

i=$((i+1))

当尝试通过设置“非零状态代码退出”来检查 bash 脚本时

set -e

bash 手册指出 set -e 具有“如果简单命令以非零状态退出则立即退出。”的效果。

不幸的是,let(以及 shift 和 ...)返回计算结果('如果最后一个 arg 的计算结果为 0,let 返回 1;否则返回 0')。因此,一个人得到的不是状态代码,而是某种返回值。有时这个返回值将为零,有时为一,具体取决于计算。因此 set -e 将根据您的计算结果导致脚本退出!!!除非您永远不使用它或求助于

let i++ || true

正如 arnaud576875 所指出的,顺便说一句,它增加了额外的 CPU 负担。

使用

let ++i

仅适用于 i 不为 -1 的特定情况,如 let i++ 仅适用于 i 不为 0 的情况。因此是半解。

虽然我喜欢 Unix,但我别无选择。

关于bash set -e and i=0;让i++不同意,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com