2017-01-13 4 views
4

Warum funktioniert diese Option nur beim ersten Mal und wird dann jedes Mal ignoriert? Es ist so, als ob es zurückgesetzt wird, wenn die Option nicht verwendet wird.Warum funktionieren getopts nur beim ersten Mal?

Hier ist meine Funktion:

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

Wenn es läuft, ist es nur true zurück, wenn die Option zum ersten Mal vorbei.

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

Antwort

3

Sie müssen diese Zeile am Anfang Ihrer Funktion hinzuzufügen:

OPTIND=1 

Ansonsten aufeinanderfolgenden Aufruf der Funktion in der Schale werden diese nicht wieder zurückzusetzen, da Funktion in der ausgeführt wird, immer dieselbe Shell.

Per help getopts:

Jedesmal, wenn es aufgerufen wird, wird getopts legen Sie die nächste Option in dem Shell-Variable $name, Namen zu initialisieren, wenn es nicht vorhanden ist, und der Index des nächsten Arguments in die Schale Variable OPTIND verarbeitet werden. OPTIND wird initialisiert auf 1 jedes Mal die Shell oder ein Shell-Skript aufgerufen wird.

+1

danke! wird in 2 Minuten akzeptiert –

Verwandte Themen