2013-01-10 13 views
6
script di

mio guscio è abbastanza semplice, come il seguente:Come funziona l'OPTIND lavoro variabile nella shell incorporato getopts

while getopts "abc:" flag; do 
     echo "$flag" $OPTIND $OPTARG 
    done 

E io fare qualche prova come il seguente:

[email protected]:~/lab/shell/getopts_go$ sh foo.sh -abc CCC Blank 
a 1 
b 1 
c 3 CCC 

[email protected]:~/lab/shell/getopts_go$ sh foo.sh -a -b -c CCC Blank 
a 2 
b 3 
c 5 CCC 

[email protected]:~/lab/shell/getopts_go$ sh foo.sh -ab -c CCC Blank 
a 1 
b 2 
c 4 CCC 

[email protected]:~/lab/shell/getopts_go$ sh foo.sh -a -bc CCC Blank 
a 2 
b 2 
c 4 CCC 

non posso capire come OPTIND funziona con diversa chiamata a linea di comando, sono confuso dall'output.

Potete aiutare a capire il meccanismo di calcolo OPTIND?

+0

script di prova eccellente per capire OPTIND –

risposta

11

Secondo man getopts, OPTIND è l'indice dell'argomento successivo da elaborare (l'indice iniziale è 1). Quindi,

In sh foo.sh -abc CCC Blank arg1 è -abc, così dopo a stiamo ancora parsing arg1 quando accanto è b (a 1). Lo stesso è vero quando il prossimo è c, siamo ancora in arg1 (b 1). Quando siamo allo c, dal c è necessario un argomento (CCC) il OPTIND è 3 (arg2 è CCC e lo saltiamo).

In sh foo.sh -a -b -c CCC Blank, arg1 è a, arg2 è b, arg3 è c, e Arg4 è CCC. Quindi otteniamo a 2, b 3, c 5.

In sh foo.sh -ab -c CCC Blank args sono (1: -ab, 2: -c, 3: CCC e 4: Blank). Quindi otteniamo: a 1, b 2, c 4.

In sh foo.sh -a -bc CCC Blank args sono (1: -a, 2: -bc, 3: CCC, 4: Blank) e otteniamo a 2, b 2, c 4.

+0

Davvero apprezzando la tua spiegazione, mi turba molto. Si scopre che sono confuso dal significato della prossima discussione. – Blank

Problemi correlati