필수 옵션에 인수가 제공되지 않으면 zparseopts는 다음 옵션을 인수로 사용합니다.

필수 옵션에 인수가 제공되지 않으면 zparseopts는 다음 옵션을 인수로 사용합니다.

나는 사용하고있다zsh 5.4.2. 문제를 일으키는 기능은 다음과 같습니다.

function zp () {
    zparseopts -E -watch:=o_watch -show=o_show
    echo "show            : $o_show"
    echo "watch           : $o_watch"
}

산출:

$ zp  --show --watch "Watching"
show            : --show
watch           : --watch Watching
    
$ zp  --watch --show 
show            : 
watch           : --watch --show

값을 전달하지 않으면 --watch(해당 매개변수는 필수임) 이 경우 다음 옵션을 --show매개변수로 사용한다는 것을 알 수 있습니다. 실제로는 다음과 같은 오류가 표시되어야 합니다.zp:zparseopts:1: missing argument for option: -watch

오류를 발생시키는 대신 매개변수로 --watch사용하는 이유는 무엇 입니까?--show

답변1

비교해 보면 GNU C 함수도 이런 방식으로 작동한다고 확신합니다 getopt_long. 예를 들어 GNU ls를 사용하면 다음과 같습니다.

$ ls --sort --foo
ls: invalid argument ‘--foo’ for ‘--sort’
Valid arguments are:
...

--walk매개변수를 선택사항 으로 설정하면 두 개의 매개변수가 zparseopts사용됩니다 --watch --show.

모든 경우에 옵션 인수는 동일한 위치 인수의 옵션 바로 뒤에 나오거나 다음 위치 인수에 나타나야 합니다. 선택적 매개변수라도 "-"로 시작하지 않으면 다음 매개변수에 나타날 수 있습니다.

그러나 사용자는 어떤 옵션이 인수를 취하는지 알아야만 하는 것 같습니다. 이는 짧은 옵션(예: tar -tzfwith )에서도 발생합니다 tar -tfz.

제 생각에는 (only)를 사용하면 --sort=whatever더 명확해지겠지만 zparseopts실제로는 직접적으로 지원되지도 않습니다 =. (매개변수 값으로 제공됩니다 --sort=whatever). =whatever이는 짧은 옵션에는 적용되지 않습니다.

관련 정보