Saia do loop while ao atingir o último argumento posicional

Saia do loop while ao atingir o último argumento posicional

Quero adaptar isso para que quando a função atingir o último argumento posicional, a condição while saia.

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
}

Responder1

Você está usando shift, então verifique quando "$1" está vazio

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

Responder2

Você deve ler man getopt getopts, em vez de reinventar as opções de análise.

Você poderia fazer seu loop de forma mais compacta, percebendo que $#é decrementado por shift:

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

informação relacionada