當調用一個期望返回的函數而不期望返回的函數時,我並不完全清楚bash的exit關鍵字的方式/原因。如何退出預計返回的bash函數
例如,在下面的攝製:
#!/bin/bash
exitfunc()
{
echo "Flag 1"
exit
}
exitfunc
echo "We should never see this."
我們看到的輸出:
$ ./z.bash
Flag 1
然而,在此略作修改:
#!/bin/bash
exitfunc()
{
echo "Flag 1"
exit
}
foo=exitfunc
echo "We should never see this."
輸出顯示功能顯然不會退出shell。
$ ./z.bash
We should never see this.
看來,在所述第二版本的Flag 1
是存儲在FOO,可能存儲的錯誤代碼的值。我的問題是,爲什麼exit
在用這種方式調用的函數中有這種行爲?它是否在函數期望返回時打開新的shell?人們應該如何正確退出這些功能之一?我是否需要檢查foo
的輸出值,並且包括exit
捕捉器一直向上調用堆棧?
謝謝。