Beenden Sie die While-Schleife, wenn das letzte Positionsargument erreicht ist.

Beenden Sie die While-Schleife, wenn das letzte Positionsargument erreicht ist.

Ich möchte dies so anpassen, dass die While-Bedingung beendet wird, wenn die Funktion das letzte Positionsargument erreicht.

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
}

Antwort1

Sie verwenden die Umschalttaste. Prüfen Sie daher, ob "$1" leer ist.

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

Antwort2

Sie sollten lesen man getopt getopts, anstatt die Analyseoptionen neu zu erfinden.

Sie können Ihre Schleife kompakter gestalten, indem Sie realisieren, dass $#um Folgendes dekrementiert wird shift:

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

verwandte Informationen