gpt4 book ai didi

linux - 了解 Bash 短路

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:28 30 4
gpt4 key购买 nike

首先,我不是 Bash 专家。几个月前我发现,如果我同时使用 &&|| 短路运算符和花括号,那么如果第一个语句以真实值退出,如果 true block 中的最后一条语句退出非零,那么 fail block 也将被执行。像这样:

returnNumber 0 && {
echo 'OK'
returnNumber 1
} || {
echo 'NG'
}

将输出:

OK
NG

因此,我为此寻找了最简单的解决方案,并想出了这个:

returnNumber 0 && {
echo 'OK'
returnNumber 1
:
} || {
echo 'NG'
}

我知道,省略内置的冒号很容易,但这是解决问题的正确方法吗?

最佳答案

这其实是一个很常见的Bash pitfall .它不是错误。

returnNumber 0 计算结果为真,因此第二个 block (由逻辑和 && 连接)也被计算以确保 first && second 的结果 仍然是正确的。
第二个 block 输出 OK 但求值为 false,所以现在 first && second 的结果是 false。这意味着第三部分(由逻辑或 || 连接)也必须被评估,导致 NG 也被显示。


而不是依赖于 &&||,你应该使用 if 语句:

if returnNumber 0; then
echo 'OK'
returnNumber 1
else
echo 'NG'
fi

tl;dr: 永远不要使用 x && y || zy 可以返回非零退出状态时。

关于linux - 了解 Bash 短路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35728895/

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