Bash阻止和返回码---需要说明

克罗玛斯

我已经使用Bash很长时间了,但是似乎我仍然想念一些东西。请考虑以下代码:

function surprise {
    true && {
        echo 'Expected';
        false;
    } || {
        echo 'Unexpected';
    }
}

surprise;

这是我的实际问题和输出的简短演示:

Expected
Unexpected

到目前为止,我一直认为,无论“ Expected”块返回的内容都不会影响||“ Unexpected”块的前面,但似乎||并没有true命令输出进行检查那样,而是对false括号内命令进行了检查

有人可以解释一下实际发生了什么吗?先感谢您。

用户名

好像|| 不会根据true命令的输出进行检查,而是针对括号内的false命令进行检查。

您可以说是这种情况。

x && y || z 不是if / then / else结构,也不应该用作一个结构。它是布尔运算符(等同于“ x AND y OR z”)的组合,将评估所需的命令数量,以确定结果。(与大多数编程语言一样,除非按括号或花括号进行分组,否则评估是从左到右的,因此顺序为(x && y) || z。)

因此,为了确定的结果x && y,当x为真时,还必须对y求值。另一方面,当x为false时,无论如何结果都将为false,因此它将短路并跳过y的求值

介于两者之间的值{cmd; cmd; cmd}实际上是单个命令还是块,根本不重要。在这种情况下,它只能帮助您查看实际效果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章