我很久以为我了解shell,但是却遭遇了意料之外的行为。
考虑以下代码:
乍一看,
Bash 手册解释了
这种意外行为背后的逻辑是什么?
针对 bash-4.4 版本。 相关问题:https://dev59.com/L18d5IYBdhLWcg3wkS7Y#63884458
考虑以下代码:
#!/bin/bash
foo()
{
if false
then
echo success
else
return
fi
}
foo || echo failure
乍一看,
else return
部分似乎是多余的,但实际上它是必要的。代码输出 failure
,但如果删除了引用部分,则什么都不会输出。Bash 手册解释了
if
的行为:
某种程度上,我期望当命令执行失败时,退出状态是最后一个执行的命令的退出状态,如果没有条件测试为真,则为零。
if
会失败。
想象一下,当 echo success
站在那里时,有些依赖命令只有在主命令 (false
在此) 成功执行时才有意义。这种意外行为背后的逻辑是什么?
针对 bash-4.4 版本。 相关问题:https://dev59.com/L18d5IYBdhLWcg3wkS7Y#63884458