마지막 위치 인수에 도달하면 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

관련 정보