我正在編寫腳本,然後遇到了一個奇怪的問題。如果我編寫一個腳本,其中包含一些可能調用輸出字符串然後退出的錯誤函數的函數,它將退出我的shell。我知道它爲什麼這樣做。這是因爲一個函數調用與調用者位於同一個進程空間(至少它在bash中),所以函數中的退出會使用提供的退出代碼來終止當前進程。例如:退出函數堆棧而不退出shell
error()
{
echo $1
exit 1
}
fn()
{
if [ $# == 0 ]; then
error "Insufficient parameters."
fi
# do stuff
}
$ fn
Insufficient parameters.
[shell terminates]
所以我的問題是,我可以退出的函數棧的所有功能,而不終止當前的shell,沒有產生一個新的子shell?
感謝
看起來好像下面的「return」:這是爲了這個目的而內置在shell中的功能。殺殼是不雅的。 – JPGConnolly
@JPGConnolly你是什麼意思'下面的「返回」是可取的,似乎'?如果你的意思是使用內建的'return'語句,那麼你沒有看到這個問題,因爲沒有簡單的方法來使用它,這樣它就會從一個稱爲幾個函數的函數內跳回到基本shell,而不是必須詢問每個函數調用的返回值,這在某些情況下不可行或不可行。在這種情況下,執行'kill -INT $$'比使用'return'更優雅。 – Adrian
$的值是多少?源函數的調用者看到了嗎?還是它也終止了? – Michael