必須オプションに引数が指定されていない場合、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パラメータをオプションに設定すると、2つのパラメータがzparseopts使用されます--watch --show

すべての場合において、オプション引数は同じ位置引数のオプションの直後に続くか、次の位置引数に現れる必要があります。オプションのパラメーターでも「-」で始まらない場合は、次のパラメーターに表示されることがあります。

しかし、ユーザーはどのオプションが引数を取るかを知る必要があるようです。これは短いオプション(tar -tzfwithなど)でも発生しますtar -tfz

私の考えでは(only)を使用すると--sort=whateverより明確になりますzparseoptsが、実際には直接サポートされていません=。 (パラメータ値として提供されます--sort=whatever)。=whateverこれは短いオプションには適用されません。

おすすめ記事