나는 사용하고있다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 -tzf
with )에서도 발생합니다 tar -tfz
.
제 생각에는 (only)를 사용하면 --sort=whatever
더 명확해지겠지만 zparseopts
실제로는 직접적으로 지원되지도 않습니다 =
. (매개변수 값으로 제공됩니다 --sort=whatever
). =whatever
이는 짧은 옵션에는 적용되지 않습니다.