这是一个简单的问题.为什么这不符合我的想法:
(echo "Test 1"; exit) && echo "Test 2"
Run Code Online (Sandbox Code Playgroud)
...要么...
VAR1=1
VAR2=2
[ $VAR1 == $VAR2 ] || (echo '$VAR1 does not equal $VAR2, exiting.'; exit)
echo -e 'Well, I\'m still alive yo!'
Run Code Online (Sandbox Code Playgroud)
尽管有明确的exit命令,运行这两个片段中的任何一个都会导致脚本继续执行.
显然,由于某些原因,括号正在影响命令,我的问题是为什么?
Kev*_*vin 11
括号在子shell中执行它们的内容,因此它是退出的子shell.
您通常可以使用另一个&&或使用{}而不是使用相同的效果().
{ echo "Test 1"; exit; } && echo "Test 2"
Run Code Online (Sandbox Code Playgroud)
要么
echo "Test 1" && exit && echo "Test 2"
Run Code Online (Sandbox Code Playgroud)
小智 6
来自http://tldp.org/LDP/abs/html/subshells.html
嵌入在括号之间的命令列表作为子 shell 运行。
( command1; command2; command3; ... )
Run Code Online (Sandbox Code Playgroud)
大括号之间的代码块不会启动子 shell。
{ command1; command2; command3; . . . commandN; }
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,退出由子 shell 运行,该子 shell 终止并将控制权返回给调用 shell。