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.
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?
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.