Mas não é isso que está sendo solicitado a combinar. O problema não tem nada a ver com case e tudo com getopt e set antes.
Embora o bloco caso ainda verifique o mesmo $1 , ele não está mais recebendo apenas o parâmetro da linha de comando. O comando anterior set substituiu os parâmetros originais pela saída do programa getopt , que geralmente se parece com -- "g" .
Esse parâmetro extra -- é inserido por getopt para indicar que as opções são interrompidas neste ponto e os argumentos não opcionais começam. Esse é todo o propósito de getopt - classificar e separar os diferentes tipos de argumentos da linha de comando.
Se você adicionar esta linha, ela deve se tornar óbvia:
while true; do
+ echo "arg 1 is '$1'"
case "$1" in