我想在我的.bash_profile中定義的函數內使用getopts
。 這個想法是我想傳遞一些標誌到這個函數來改變它的行爲。在Bash函數中使用getopts
下面的代碼:
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
當我調用它是這樣的:
t -a bc
我得到這樣的輸出:
-a bc
?
有什麼不對?我想獲得價值bc
而無需手動移動和解析。如何在函數內正確使用getopts
?
編輯:糾正了我的代碼片段嘗試$ OPTARG,無濟於事
編輯#2:OK原來的代碼是好的,我的殼莫名其妙地被搞砸了。打開一個新窗口解決了它。參考價值確實在$ OPTARG。
如果可以的話,我會百回答這個問題的答案。這讓我瘋狂! –
1.)'1&2'中的'1'不是必需的。 2.)你錯過了將'a','o'和'OPTARG'定義爲本地。 3)'exit'不會退出腳本,而只是一個子shell。爲了退出腳本,必須在外殼中設置-e,在子外殼中設置exit 1。這個例子不會觸發問題,但是'MSG = $(foo ...)'會做到這一點。 – ceving
@ceving 1)這是編碼風格的問題,但不,根據語言定義不需要。 2)同意,這些應該是本地的。 3)如你所說,退出*將*退出我的例子中的腳本。當然'exit'不會退出子shell,但這不是這個問題的具體問題。你不必使用'set -e',你只需要確保接收到錯誤,'MSG = $(foo ...)||死「的作品也是如此。 'set -e'是解決這個問題的一種方法[但它不是傻瓜式的](http://mywiki.wooledge.org/BashFAQ/105),我和其他許多人一樣,不推薦使用它。 –