Este script requer pelo menos um argumento, se não exibir informações de uso. Deve fazer echo $USAGE >&2 , pois isso é um erro. Outros scripts podem funcionar com zero argumentos, então você terá que modificar. Assim como alguns não aceitam o argumento i .
"?", vs *
Sim, eles são diferentes:
-
"?"diz para procurar um?. Isso é o que getopts retorna quando encontra uma opção que não espera (opção inválida). -
*diz para o caso, fazer isso é você não encontrar nenhum outro jogo. Isso não deveria acontecer, mas pode acontecer. Provavelmente indica um bug no getopts, ou mais provavelmente o seu programa (veja programação defensiva).