合并||和&&在bash中[重复]

问题描述 投票:0回答:4

当我在外壳的下一行中执行此操作时

echo this || echo that && echo other

输出为:

this
other

现在我不明白echo other的执行方式,因为echo that由于未执行而没有返回成功的退出状态。 &&操作符仅在左命令成功退出时才执行右命令。

这是否意味着如果左侧的任何内容成功退出,&&运算符将执行右手命令?

bash operators echo
4个回答
1
投票

您可以将该示例重写为:

(echo this || echo that) && echo other

您说echo that不会返回成功的退出状态,而是根本不返回任何内容-它不会执行。因此,表达式(echo this || echo that)具有成功的结果(返回echo this),这使echo other被执行。

[在这种情况下的一个很好的例子只是运行echo this || echo that-它的返回值为0,因此,不执行echo that不会使它变成失败。


1
投票

在同一行代码中同时使用||&&并不是一个好习惯,尽管它可能在某些情况下适用,但这并不意味着在所有情况下都适用。

请参见http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3

如果您想短路,请始终使用if语句。

命令分组是一种变通方法,如果您确实需要使用{ },请执行此操作>

echo this || { echo that && echo other; }
    

0
投票

&&||具有相同的优先级。


0
投票

效果:

© www.soinside.com 2019 - 2024. All rights reserved.