linux - 使用 && 和 || 时如何执行退出命令?
问题描述
我有两种情况。
echo a &>/dev/null && echo b || (echo c ; exit 1) ; echo d ;echo e;echo f
输出:
b
d
e
F
echo a &>/dev/null && echo b || (echo c ; exit 1) ; echo d ;echo e;echo f
输出:
C
d
e
F
我需要我的脚本在退出命令之后退出,而不是执行进一步的命令。我该怎么做?
解决方案
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
而不是&& ||
-- 它可以正确处理分组而不会带来额外的麻烦,并且没有不明显的执行路径。不像&& ||
,它只是工作。
推荐阅读
- kubernetes - 同一节点中同一 pod 的多个实例 - Kubernetes
- reactjs - react中的axios在本地工作,但在heroku中不起作用
- spring-boot - 将springboot war文件上传到Weblogic 12.2.1.3服务器时出错
- python - 为什么这个 Python 文件(解析 XML 和验证)可以在 Windows 上工作,但不能在 Mac OS 上工作?
- r - 将开始和结束范围中的重叠分离到自己的数据框行中
- amazon-web-services - AWS Sagemaker Studio 本地 RAM 过载
- javascript - return 语句后的括号
- fortran - Fo Householder Transformation QR 分解的标志问题
- c++ - left, right, setw 一起输出问题
- python-3.x - 填充 Tkinter 窗口