2012-05-04 11 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は、複数の呼び出しがある場合にのみ必要である1に初期化されているOPTIND変数に依存しているいずれかの

readArgs() { OPTIND=1; ... 

または

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

を行います関数の –

+0

OPは機能のコンテナを記述しませんでした。私は私の.bashrcで書く関数のためにこれらのメソッドを使用します –

+1

この答えはOPの質問に直接答えませんでしたが、なぜgetoptsが関数で動作しないのかを検索し、コードのデバッグに非常に役立ちました(私の.bashrcの関数の場合も) – paulski