Выйти из цикла while при достижении последнего позиционного аргумента

Выйти из цикла while при достижении последнего позиционного аргумента

Я хочу адаптировать это так, чтобы при достижении функцией последнего позиционного аргумента условие while завершалось.

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
}

решение1

Вы используете сдвиг, поэтому просто проверьте, когда «$1» пусто

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

решение2

Вам следует прочитать man getopt getopts, а не переизобретать параметры синтаксического анализа.

Вы могли бы сделать свой цикл более компактным, понимая, что $#уменьшается на shift:

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

Связанный контент