首页 > 解决方案 > 使用 && 和 || 时如何执行退出命令?

问题描述

我有两种情况。

  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

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

标签: linuxbashshellscripting

解决方案


in 命令在( )子 shell 中执行,所以exit里面的 parens 只退出子 shell,而不是主 shell。您可以对命令进行分组,而无需强制使用{ }而不是括号。注意:与括号不同,您需要在 之后有一个空格,在 .{之前需要一个分号(或 & 号)}

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

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

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


推荐阅读