2012-05-04 67 views
11
function readArgs() { 
    while getopts "i:o:p:s:l:m" OPTION; do 
     case "$OPTION" in 
      i) 
       input="$OPTARG" 
       ;; 
      o) 
       output="$OPTARG" 
       ;; 
      ... 
     esac 
    done 
} 

readArgs 

if [[ -z "$input" ]]; then 
    echo "Not set!" 
fi 

這總是給我Not set!但如果我行註釋掉function readArgs() {}readArgs,它的工作原理。爲什麼?爲什麼函數中的getopts失敗?

此外,

input="$OPTARG" 
echo "$input" 
;; 

不起作用。

回答

15

getopts正在解析參數到readArgs函數,並且您沒有給該函數任何參數。

嘗試用:

readArgs "[email protected]" 
8

getopts依靠OPTIND變量被初始化爲1或者根本

readArgs() { OPTIND=1; ... 

readArgs() { local OPTIND; ... 
+0

這僅僅是必要的,如果有多個調用的功能。 –

+0

OP沒有描述函數的容器。我使用這些方法來編寫我在.bashrc中編寫的函數。 –

+1

雖然這個答案沒有直接回答OP的問題,但它確實出現了爲什麼getopts不能在函數中工作,並且在調試我的代碼時非常有用(也用於我的.bashrc中的函數) – paulski

相關問題