내 bash 스크립트에서 첫 번째 인수 다음에 플래그를 처리하려고하지만 getopts는 인수 전에 플래그 만 반환합니다.
or flag in getopts; do
case $flag in
d)
echo "-d flag was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
이 예제에서 “플래그가 트리거되었습니다!” 한 번이 아닌 세 번 인쇄 할 문자열입니다.
$ ./myscript.sh -d arg1 -d -d -d
getopts
-d (develop mode) was triggered!
답변
GetOpt에서이 자습서를 확인하십시오. 이 경우 opstring을 무시한 것처럼 보입니다.
다음과 같은 것을 시도하십시오.
for flag in getopts "M:d:a"; do
case $flag in
...
-d -M 및 -a의 유효한 옵션을 예상 할 수 있습니다. :는 -d 옵션과 옵션이 매개 변수를 사용한다는 것을 나타냅니다 (:는 해당 옵션 앞에옵니다).
./somescript -M -d sometext -a somemoretext
중복 옵션을 사용하지 마십시오. 다른 시스템과 쉘에서 예측할 수없는 결과가 나타납니다.