【问题标题】:How to execute exit command while using && and ||?使用 && 和 || 时如何执行退出命令?
【发布时间】:2018-10-10 05:35:16
【问题描述】:

我有两种情况。

  1. echo a &>/dev/null && echo b || (echo c ; exit 1) ; echo d ;echo e;echo f

输出:

b

d

e

f

  1. echo a &>/dev/null && echo b || (echo c ; exit 1) ; echo d ;echo e;echo f

输出:

c

d

e

f

我需要我的脚本在退出命令后退出,而不是执行进一步的命令。我该怎么做?

【问题讨论】:

    标签: linux bash shell scripting


    【解决方案1】:

    ( ) 中的命令在子 shell 中执行,因此括号内的exit 仅退出子 shell,而不是主 shell。您可以使用{ } 而不是括号对命令进行分组。注意:与括号不同,{ 之后需要一个空格,} 之前需要一个分号(或与号)。

    $ eco a &>/dev/null && echo b || { echo c ; exit 1; } ; echo d ;echo e;echo f output
    c
    logout
    

    另外,您应该知道使用&& ... ||if then else fi 结构相同;特别是,如果&&|| 之间的命令(对应于if 语句中的then 子句)碰巧失败,它也会执行|| 之后的内容。那里只有echo b,它不太可能(但技术上可能)失败;如果它更复杂,你会得到意想不到的结果。

    因此,我建议使用if then else fi 而不是&& ||——它可以正确处理分组而不会带来额外的麻烦,并且没有不明显的执行路径。与&& || 不同,它可以正常工作。

    【讨论】:

      【解决方案2】:

      exit 最终会退出子 shell ((...)),而不是调用它的脚本。

      Command grouping

      但是,echo b 以状态 0 退出,所以 || 之后的任何内容都不会被执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 2020-03-27
        • 2011-03-09
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多