O que acontece com getopts quando o final das opções é encontrado

0

O manual do Bash diz

getopts optstring name [args]

When the end of options is encountered, getopts exits with a return value greater than zero. OPTIND is set to the index of the first non-option argument and name is set to ?.

Em um exemplo de o tutorial do Bash Hackers Wiki getopts :

while getopts ":a" opt; do
  case $opt in
    a)
      echo "-a was triggered!" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

Quando o final das opções é encontrado, getopts sai com um retorno valor maior que zero, então o loop while irá parar. Então, dentro do loop while, a parte dentro de \?) nunca foi atingida? Se sim, por que está aí?

Obrigado.

    
por Tim 21.07.2017 / 14:54

1 resposta

5

Está lá para processar opções inválidas. No exemplo, se você executar script -a , a opção -a é esperada e resulta em “ -a foi acionado!”. Se você executar script -b , -b não será válido e será tratado pelo caso \? , resultando em "Opção inválida: -b ".

    
por 21.07.2017 / 14:57

Tags