最後の位置パラメータに達すると、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

関連情報