-
Você não precisa
shift
(e não deve) dentro do loop porquegetopts
rastreia qual parâmetro posicional está processando atualizando a variávelOPTIND
. -
Você não precisa para
shift
após o loop: você pode usarOPTIND
para determinar quais parâmetros posicionais serão gerenciados por você mesmo. Usarshift
, no entanto, é a maneira mais simples de lidar com argumentos que foram processados porgetopts
, supondo que você não precise pós-processá-los por conta própria.
Ter o getopts
não em si tem alguns benefícios: você pode revisitar os argumentos, se necessário, e pode reproduzir a linha de comando original. O último é útil, por exemplo, em mensagens de erro, ou se você precisar executar outro comando com os mesmos argumentos (eu sei que usei isso no passado).