2012-05-04 10 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 

Questo è sempre dandomi Not set! ma se io commento le linee function readArgs() {, } e readArgs, funziona. Perché?Perché i "getopts" all'interno di una funzione non funzionano?

Inoltre,

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

non funziona.

risposta

15

getopts sta analizzando gli argomenti della funzione readArgs e non si fornisce alcuna funzione a quella funzione.

Prova con:

readArgs "[email protected]" 
8

getopts si basa sulla OPTIND essere variabile inizializzata a 1. In entrambi fanno

readArgs() { OPTIND=1; ... 

o

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

Questo è necessario solamente se ci sono più invocazioni della funzione. –

+0

L'OP non ha descritto il contenitore della funzione. Uso questi metodi per le funzioni che scrivo nel mio .bashrc –

+1

Sebbene questa risposta non abbia risposto direttamente alla domanda degli OP, viene visualizzata una ricerca del motivo per cui getopts non funziona in una funzione ed è stato molto utile nel debug del mio codice (anche per funzioni nel mio .bashrc) – paulski

Problemi correlati