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 

Dies gibt mir immer Not set! aber wenn ich die Zeilen auf Kommentar function readArgs() {, } und readArgs, es funktioniert. Warum? AuchWarum 'getopts' innerhalb einer Funktion nicht funktioniert?

,

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

funktioniert nicht.

Antwort

15

getopts analysiert die Argumente der readArgs-Funktion, und Sie geben dieser Funktion keine Argumente.

Versuchen mit:

readArgs "[email protected]" 
8

getopts am 1. Entweder

readArgs() { OPTIND=1; ... 

oder

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

Dies ist nur erforderlich, wenn Sie initialisiert OPTIND Variable, verlässt sich mehrere Anrufungen sind der Funktion. –

+0

Das OP hat den Container der Funktion nicht beschrieben. Ich verwende diese Methoden für Funktionen, die ich schreibe in meinem .bashrc –

+1

Obwohl diese Antwort die OPs Frage nicht direkt beantwortet, es kommt auf eine Suche nach, warum getopts funktioniert nicht in einer Funktion, und war sehr nützlich bei der Fehlersuche in meinem Code (auch für Funktionen in meiner .bashrc) – paulski

Verwandte Themen