옵션을 구문 분석하기 위해 다음 스크립트를 실행하려고 하는데 getopts
작동하지 않는 것 같습니다.
#!/bin/bash
set -x
echo $@
while getopts "rf" opt
do
case "${opt}" in
r)
ropt=${OPTARG}
;;
f)
fopt=${OPTARG}
;;
esac
done
shift $((OPTIND -1))
echo $fopt $ropt
내가 얻는 결과는 다음과 같습니다.
$ ./myscript.sh -f opt2 -r opt1
+ echo -f opt2 -r opt1
-f opt2 -r opt1
+ getopts rf opt
+ case "${opt}" in
+ fopt=
+ getopts rf opt
+ shift 1
+ echo
+ set +x
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
답변1
옵션이 옵션 인수를 사용하기를 원하지만 getopts
이를 알리지 않습니다.
당신은 사용해야합니다
while getopts "r:f:" opt; do ...; done
즉, 매개변수가 있는 각 옵션은 :
매개변수 문자열 다음에 와야 합니다 getopts
.
당신은 또한기본 case
유효하지 않은 옵션을 처리하는 마지막 분기:
*) usage >&2
exit 1
(잘못된 옵션 또는 누락된 옵션 인수에 대한 오류 메시지는 간단한 도움말 메시지를 표준 출력으로 인쇄하기 위해 정의한 함수에서 예상되는 자체적으로 표시됩니다. getopts
)usage
또한, 큰따옴표를 잊지 마세요.모두확장, 심지어 $(( OPTIND - 1 ))
.
마지막 요점과 관련: