나는 이 함수를 내부적으로 function
사용하여 bash에 전달된 인수를 구문 분석하려고 합니다. getopts
함수가 처음 호출될 때 작동하지만 이후의 모든 호출에서는 실패합니다.
다음은 간단한 테스트 사례입니다.
#!/bin/bash
function getopt_test {
PARAMS=""
while getopts "a:" opt; do
case $opt in
a)
PARAMS="${PARAMS} $OPTARG"
;;
esac
done
echo "PARAMS => $PARAMS"
}
getopt_test -a call_1
getopt_test -a call_2
스크립트의 출력은 다음과 같습니다.
~$ ./tst.sh
PARAMS => call_1
PARAMS => <--- missing 'call_2'
~$
두 번째 호출 전에 어떻게든 재설정해야 할 것 같은데 getopts
어떻게 해야 하는지 잘 모르겠습니다. 어떤 아이디어가 있나요?
답변1
대답은 getopts
포인터를 유지하는 것이므로 함수의 시작 부분에 또는 를 추가하는 $OPTIND
것이 요령입니다 .local OPTIND
OPTIND=1
getopt_test
링크를 제공해 주신 @sivann에게 감사드립니다.getopts가 연속으로 두 번 호출되지 않습니까?스택오버플로우에서