카테고리 보관물: Superuser

superuser

bash getopts는 첫 번째 인수 후에 플래그를 보지 않습니다. 첫 번째 인수 다음에 플래그를 처리하려고하지만

내 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

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

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


답변