我有两种情况。
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
我需要我的脚本在退出命令后退出,并且不执行其他命令。我该怎么办?
答案 0 :(得分:1)
( )
中的命令在子shell中执行,因此parens中的exit
仅退出子shell,而不退出主shell。您可以使用{ }
而不是parens对命令不进行分组,而不强制使用子外壳。注意:与括号不同,{
后需要一个空格,}
前需要一个分号(或“&”号)。
$ eco a &>/dev/null && echo b || { echo c ; exit 1; } ; echo d ;echo e;echo f output
c
logout
另外,您应注意,使用&& ... ||
与if then else fi
结构不相同;特别是,如果&&
和||
之间的命令(与then
语句中的if
子句之间的命令)碰巧失败,它将在执行之后执行||
也是如此。仅存在echo b
,它不太可能(但从技术上来说)会失败;如果比较复杂,您会得到意想不到的结果。
因此,我建议使用if then else fi
而不是&& ||
-它可以正确处理分组,而不会带来额外的麻烦,并且没有明显的执行路径。与&& ||
不同,它可以正常工作。
答案 1 :(得分:0)