gpt4 book ai didi

bash - 如果命令失败,为什么 `if` 语句的退出代码不是失败?

转载 作者:行者123 更新时间:2023-12-05 03:16:55 26 4
gpt4 key购买 nike

我以为我知道 shell,但我被意想不到的行为咬伤了。

考虑这段代码:

#!/bin/bash
foo()
{
if false
then
echo success
else
return
fi
}

foo || echo failure

现在乍一看,人们会认为 else return 部分是多余的,但事实并非如此。代码原样输出失败,但是当引用的部分被删除时,没有输出。

bash 手册解释(对于 if):

The exit status is the exit status of the last command executed, or zero if no condition tested true.

不知何故,当命令失败时,我希望 if 失败。想象一下 echo success 所在的位置实际上存在依赖命令,这些命令只有在主命令(此处为 false)成功时才有意义。

这种意外行为背后的逻辑是什么?

见于 bash-4.4。相关:https://stackoverflow.com/a/63884458/6607497

最佳答案

if 语句实际上从未用return 语句完成;该函数立即返回,退出状态由return提供。该退出状态是 return 退出之前的最后一个命令的状态,即 false

没有 returnif 确实 完成,并且如文档所述,if 的退出状态如果 if 子句或任何 elif 子句中的条件均未评估为真,则 command 定义为 0。这是有道理的,因为 if 语句成功确定不需要执行任何 ifelif block 。

关于bash - 如果命令失败,为什么 `if` 语句的退出代码不是失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74362778/

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