Salir del bucle while al llegar al último argumento posicional

Salir del bucle while al llegar al último argumento posicional

Quiero adaptar esto para que cuando la función alcance el último argumento posicional, la condición while salga.

console_codes ()
{
 local exec=0
 local narg="$#" iarg=0
 while (( narg > 0 )); do
   opt="$1" ; iarg=$(( iarg + 1 ))
   case $opt in
    ("-V"|"--version")
      printf '%s\n' "Version"
      return 0
      ;;
    ("-h"|"--help")
      printf "Help.\n"
      return 0
      ;;
    ("-e"|"--exec") exec=1 ; shift 1 ;;
    (*) shift 1 ;;
   esac
 done
}

Respuesta1

Estás usando shift, así que comprueba cuando "$1" esté vacío

while true; do
  [ -z "$1" ] && break
  echo "$1"
  shift
done

Respuesta2

Debería leer man getopt getopts, en lugar de volver a reinventar las opciones de análisis.

Podrías hacer tu bucle de manera más compacta al darte cuenta de que $#se reduce en shift:

while [[ $# -gt 0 ]] ; do
  # some code using $1
 shift
done

información relacionada