2017-01-13 12 views
4

このオプションは、初めて使用されたときのみ機能し、その後は無視されます。オプションを使用しないとリセットされるようです。初めてのオプションを渡すときgetoptsはなぜ初めて動作するのですか?

testopts() { 
    local var="o false" 
    while getopts "o" option; do 
     case "${option}" in 
      o) 
       var="o true" 
       ;; 
     esac 
    done 
    echo $var 
} 

それを実行している、それだけでtrueを返す:

は、ここに私の機能です。

OPTIND=1 

機能がで実行されているので、それ以外の場合、シェル関数の連続呼び出しがこのバックをリセットされていません:あなたは、あなたの関数の先頭に次の行を追加する必要が

$ testopts 
o false 
$ testopts -o 
o true 
$ testopts -o 
o false 

答えて

3

毎回同じシェル。 help getopts 1として

、それが呼び出されるたびに、getoptsは、それが存在しない場合は名前を初期化し、 シェル変数$nameで次のオプションを配置します、と に次の引数のインデックスシェル 変数OPTINDに処理してください。 OPTINDは、シェルが呼び出されるたびに1に初期化されます。シェルスクリプトが呼び出される度に1に初期化されます。

+1

ありがとうございました! 2分で受け入れる –

関連する問題