Chamar getopts de bash de uma função falha na segunda vez

2

Estou tentando analisar os argumentos passados para um bash function usando getopts dentro dessa função. Funciona quando a função é chamada pela primeira vez, mas falha em todas as chamadas subsequentes.

Aqui está um caso de teste simples:

#!/bin/bash

function getopt_test {
    PARAMS=""
    while getopts "a:" opt; do
        case $opt in
            a)
                PARAMS="${PARAMS} $OPTARG"
                ;;
        esac
    done
    echo "PARAMS => $PARAMS"
}

getopt_test -a call_1
getopt_test -a call_2

A saída do script é esta:

~$ ./tst.sh
PARAMS =>  call_1
PARAMS =>               <--- missing 'call_2'
~$ 

Eu acho que getopts deve ser redefinido antes de chamá-lo pela segunda vez, mas não consigo descobrir como. Alguma idéia?

    
por MLu 01.02.2015 / 09:37

1 resposta

2

A resposta é que getopts mantém o ponteiro em $OPTIND e, portanto, o truque é adicionar local OPTIND ou OPTIND=1 ao início da função getopt_test .

Obrigado a @sivann por fornecer o link.

    
por 01.02.2015 / 10:13