最後の位置引数に到達したら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

関連情報