bash getopts는 첫 번째 인수 후에 플래그를 보지 않습니다.


2

내 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!

1
환경에 POSIXLY_CORRECT가 정의되어 있습니까? 그렇다면 옵션이 아닌 첫 번째 인수 이후의 모든 것을 무시합니다.
Frank Thomas

답변:


1

GetOpt에서이 자습서를 확인하십시오. 이 경우 opstring을 무시한 것처럼 보입니다.

다음과 같은 것을 시도하십시오.

for flag in getopts "M:d:a"; do
    case $flag in
...

-d -M 및 -a의 유효한 옵션을 예상 할 수 있습니다. :는 -d 옵션과 옵션이 매개 변수를 사용한다는 것을 나타냅니다 (:는 해당 옵션 앞에옵니다).

./somescript -M -d sometext -a somemoretext

중복 옵션을 사용하지 마십시오. 다른 시스템과 쉘에서 예측할 수없는 결과가 나타납니다.

http://wiki.bash-hackers.org/howto/getopts_tutorial


1
게시하기 전에 해당 자습서를 읽었습니다. 확실히 좋은 소개이지만, 해결하려고 시도한 사례를 처리하지 못하므로 깃발이없는 첫 번째 인수가 필요했습니다 ./somescript arg1 -M -d sometext -a somemoretext. 내 질문에 대한 귀하의 의견에서 짐작했듯이 POSIXLY_CORRECT 환경 변수가 내 문제였습니다. 설정을 해제하는 대신 getopts 대신 "$ @"를 반복하여 전체 문제를 해결했습니다.
kelorek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.