使っています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
パラメータをオプションに設定すると、2つのパラメータがzparseopts
使用されます--watch --show
。
すべての場合において、オプション引数は同じ位置引数のオプションの直後に続くか、次の位置引数に現れる必要があります。オプションのパラメーターでも「-」で始まらない場合は、次のパラメーターに表示されることがあります。
しかし、ユーザーはどのオプションが引数を取るかを知る必要があるようです。これは短いオプション(tar -tzf
withなど)でも発生しますtar -tfz
。
私の考えでは(only)を使用すると--sort=whatever
より明確になりますzparseopts
が、実際には直接サポートされていません=
。 (パラメータ値として提供されます--sort=whatever
)。=whatever
これは短いオプションには適用されません。