2011-08-19 25 views
2

當我運行下面的bash腳本時,它永遠不會打印「再見!」。 似乎dummy函數中的return語句會導致bash腳本結束,離開左腳本不執行。爲什麼return語句在函數中會導致bash腳本結束

#!/bin/bash -ex 

dummy() { 
    if [ $1 -eq 0 ] ; then 
     return 0 
    else 
     return 55 
    fi 
} 

dummy 0 
echo "when input 0, dummy will return $?" 

dummy 50 
echo "when input 50, dummy will return $?" 

echo "bye!" 

輸出:

+ dummy 0 
+ '[' 0 -eq 0 ']' 
+ return 0 
+ echo 'when input 0, dummy will return 0' 
when input 0, dummy will return 0 
+ dummy 50 
+ '[' 50 -eq 0 ']' 
+ return 55 

回答

8

你的她邦行:#!/斌/慶典-EX

這-e選項告訴Bash命令後立即退出返回非零值。

在這種情況下,當$ 1是55時,它是[$ 1 -eq 0],所以腳本立即退出。

嘗試運行你的腳本是這樣的:

$ bash yourscript.sh 

VS:

$ bash -e yourscript.sh 
+0

我在gnu bash手冊中找不到-e選項。你不會碰巧有一個參考鏈接,我可以閱讀/瞭解它嗎? –

+0

感謝神聖怪人,這是非常有幫助 – leon

+0

@Qsp這是在bash手冊中,「深埋」在選項中的深處。在bash shell中運行以查看相關段落:man bash | col -b | grep -A3'OPTIONS';男人bash | col -b | grep -A 2 - '-e *退出' – holygeek

-2

使用單引號 '再見!'。用雙引號將「!」導致問題。

+0

在提示符下,感嘆詞是有問題的,即使在單引號,但在一個腳本文件,他們不是。在提示符處,感嘆號由csh-like歷史替換機制使用(die,csh!die,csh!的歷史替換機制) – tripleee

0

變化

#!/bin/bash -ex 

到:

#!/bin/bash 

,它會工作。

其實你也可以用#!/bin/bash -x來做。

你打算用-e選項來完成別的事情嗎?

相關問題