到达最后一个位置参数时退出 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

您正在使用shift,因此只需检查“$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

相关内容