getopts 루프 변환 - 설명이 필요함

getopts 루프 변환 - 설명이 필요함

shift누군가가 이 간단한 파서 코드에 무엇이 필요한지 명확히 해준다면 기쁠 것입니다.

while getopts ":hp:" option
do
    case "${option}" in
        p)
            some_parameter=${OPTARG}
            ;;
        h)
            print_usage_and_exit 0
            ;;
        *)
            print_usage_and_exit 1
            ;;
    esac
done

shift $(( OPTIND - 1 ))

예를 들어, 나에게는 명확하지 않습니다.

  1. shift왜 내부 루프가 필요하지 않은 것 같나요 ?

    액세스가 인수 자체를 이동합니까 getopts, 아니면 어떻게 작동합니까?

  2. shift왜 후에 필요합니까 getopts?

    getopts왜 스스로 그 일을 끝내지 않았는지 이해가 안 돼요 .

답변1

  1. 변수를 업데이트하여 처리 중인 위치 인수를 추적하기 shift때문에 루프에 들어갈 필요가 없습니다 .getoptsOPTIND

  2. 당신은하지 않습니다필요to 루프 shift이후 : 이를 사용하여 OPTIND스스로 처리할 위치 매개변수를 결정할 수 있습니다. 그러나 을 사용하는 shift것은 에서 이미 처리한 매개변수를 처리하는 가장 간단한 방법입니다. getopts단, 매개변수를 직접 사후 처리할 필요는 없습니다.

가지다getopts 아니요Shift 자체에는 여러 가지 이점이 있습니다. 필요한 경우 매개변수를 직접 다시 방문할 수 있고 원래 명령줄을 재현할 수 있습니다. 후자는 예를 들어 오류 메시지에서 유용하거나 동일한 매개변수를 사용하여 다른 명령을 실행해야 하는 경우 유용합니다(과거에 사용한 적이 있음).

관련 정보