簡體   English   中英

括號內的`exit`不會退出腳本

[英]`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/subshel​​ls.html

嵌套在括號中的命令列表作為子shell運行。

( command1; command2; command3; ... )

大括號之間的代碼塊不會啟動子shell。

{ command1; command2; command3; . . . commandN; }

在第一種情況下,退出由子shell運行,子shell終止並將控制權返回給調用shell。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM