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 ))
예를 들어, 나에게는 명확하지 않습니다.
shift
왜 내부 루프가 필요하지 않은 것 같나요 ?액세스가 인수 자체를 이동합니까
getopts
, 아니면 어떻게 작동합니까?shift
왜 후에 필요합니까getopts
?getopts
왜 스스로 그 일을 끝내지 않았는지 이해가 안 돼요 .
답변1
변수를 업데이트하여 처리 중인 위치 인수를 추적하기
shift
때문에 루프에 들어갈 필요가 없습니다 .getopts
OPTIND
당신은하지 않습니다필요to 루프
shift
이후 : 이를 사용하여OPTIND
스스로 처리할 위치 매개변수를 결정할 수 있습니다. 그러나 을 사용하는shift
것은 에서 이미 처리한 매개변수를 처리하는 가장 간단한 방법입니다.getopts
단, 매개변수를 직접 사후 처리할 필요는 없습니다.
가지다getopts
아니요Shift 자체에는 여러 가지 이점이 있습니다. 필요한 경우 매개변수를 직접 다시 방문할 수 있고 원래 명령줄을 재현할 수 있습니다. 후자는 예를 들어 오류 메시지에서 유용하거나 동일한 매개변수를 사용하여 다른 명령을 실행해야 하는 경우 유용합니다(과거에 사용한 적이 있음).