[英]`exit` inside parentheses doesn't exit script
這是一個簡單的問題。 為什么這不符合我的想法:
(echo "Test 1"; exit) && echo "Test 2"
...要么...
VAR1=1
VAR2=2
[ $VAR1 == $VAR2 ] || (echo '$VAR1 does not equal $VAR2, exiting.'; exit)
echo -e 'Well, I\'m still alive yo!'
盡管有明確的exit
命令,但運行這兩個片段中的任何一個都會導致腳本繼續執行。
顯然,由於某些原因,括號正在影響命令,我的問題是為什么?
括號在子shell中執行它們的內容,因此它是退出的子shell。
您通常可以使用另一個&&
或使用{}
而不是()
來實現相同的效果。
{ echo "Test 1"; exit; } && echo "Test 2"
要么
echo "Test 1" && exit && echo "Test 2"
( ... )
的內容在子shell中執行,因此您只需exit
此shell。 這種方法應該更適合您,並且更容易閱讀維護,以便下一個人出現並打開您的腳本:
VAR1=1
VAR2=2
if [ $VAR1 == $VAR2 ] ; then
echo -e "Well, I'm still alive yo!"
else
echo "$VAR1 does not equal $VAR2, exiting."
exit
fi
只需刪除括號,它應該做你想要的。
括號相當於將其內容放入另一個shell腳本,其中exit
退出該shell腳本。
來自http://tldp.org/LDP/abs/html/subshells.html
嵌套在括號中的命令列表作為子shell運行。
( command1; command2; command3; ... )
大括號之間的代碼塊不會啟動子shell。
{ command1; command2; command3; . . . commandN; }
在第一種情況下,退出由子shell運行,子shell終止並將控制權返回給調用shell。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.