getopts
그것이 bash 함수 라면 , 제가 이해한 바에 따르면 , 함수가 계속 진행하기 위해 어떤 인수가 있는지 알 수 있도록 $@
전체 인수를 전달해야 합니다. 그렇죠?getopts
제가 보기엔 필요하지 않은 것 같은데, getopts
현재 범위에 어떤 매개변수가 있는지 어떻게 알 수 있나요? 다른 고급 언어처럼 이전 호출을 추적하는 방법이 있나요?
while getopts abcde opt; do
˄˄˄˄˄ <-- you only need to pass the argument labels here,
how getopts knows what arguments I have
case $opt in
...
esac
done
답변1
getopts
쉘에 내장되어 있으므로 $@
직접 인용할 수 있습니다. 또한 쉘 변수 OPTARG
와 OPTIND
. (함수 내에서 getopts
함수는 전역 매개변수 대신 참조됩니다. 반복 가능한(멱등성) 함수 호출을 원하는 경우 $@
현지화해야 합니다.)OPTIND
개요(초록)는 다음과 같습니다.
getopts optstring name [arg ...]
그리고 설명은 이렇습니다.
getopts
위치 매개변수를 구문 분석하기 위해 쉘 프로그램에서 사용됩니다.optstring
인식할 옵션 문자를 포함합니다. 문자 뒤에 콜론이 오면 옵션에는 인수가 있어야 하며 공백으로 구분해야 합니다.
(적어도) bash
문서 ( man bash
)에는 다음과 같이 명시되어 있습니다.
getopts
위치 인수는 일반적으로 구문 분석되지만, 더 많은 인수가 arg 값으로 제공되면getopts
해당 인수가 구문 분석됩니다.
인용하다