なぜ「引数は反対のオプションを抑制できます」が「引数は常に分離されています」よりも優先されますか?

なぜ「引数は反対のオプションを抑制できます」が「引数は常に分離されています」よりも優先されますか?

最近の問題に触発されましたtarコマンドで特定のオプションの順序が重要なのはなぜですか?、質問者がなぜ動作しないのかを知ったら、tar -cfv test.tar *.jpg後続の質問をしたいと思います。真剣に、なぜできないのですか?

コマンドに-fパラメーターが必要なオプションと、-vパラメーターが不要なオプションがある場合は、次のようになります。

cmd -fv foo

2つの異なる方法で解釈できます。vオプションの引数、-fオプションfooではない引数、またはfooオプションの引数、-fオプション-vが存在します。最初の説明はPOSIXがgetopt()行うことなので、このように実行されるコマンドがたくさんあります。

私は常に2番目の説明を好む。foo買収を受け取るかどうかに関係なく、すべてのオプションを一緒に梱包する-fこと。しかし、このような行動はもはやほとんど存在しません。最近私が使用した唯一のコマンドはJavaコマンドです(その構文は明らかにSunのバージョンに触発されました)。-f foo-ffoojartartar cfv tarfile ...

Xlibには、「個別」引数または「固定」引数を使用してオプションを指定することができるgetopt同様の機能があります。ただし、長いオプション(など)をXrmParseCommand処理するため、またはに関連しない他のオプションとして処理されます。したがって、これは私の2番目の解釈の例ではありません。-display-geometry-fv-f-v

圧縮パラメータがいつ、なぜ支配的になったのですか?この問題はPOSIX以前に解決されましたか?それともPOSIX認証でこの問題が確認されましたか? POSIXの最初のバージョンは、現在のバージョンと同じ特定の要件を持っていますか?古代にこのトピックについて記録された議論はありますか?

=スタイルオプションの解析をサポートするか、歴史的にサポートされている他のコマンド(および他のものtar)がありますか?jar-fv foo-f foo -v

ベストアンサー1

まず、標準getopt()スタイルの引数処理では、引数は適用されるオプションに従って圧縮する必要はなく、圧縮できます。したがって、-fパラメータが承認されると、次の両方が有効です。

command -ffoo positional arguments
command -f foo positional arguments

あなたが「2番目の説明」と呼ぶのは実際には非常にまれです。私が今考えることができる限り、tarこのmt方法で動作する唯一の既存のコマンドですjar。スタイルがたくさん違います。オプションは前にも表示されません!なぜほとんど使われないのかは確かに言えませんが、どのオプションがどの引数と一致するのかわかりにくいからです。たとえば、 と引数を取るが、 、 そしてそうでない場合、次のような結果が表示されます。targetopt()-bdace

command abcde b-argument d-argument

...これは、コマンドを書くときにオプションの文字グループを見直し、再読み込みし、引数を必要とするオプションを覚え、引数を同じ順序で書く必要があることを意味します。これはどうですか?

command adcbe b-argument d-argument

そう、このdオプションはb-argument逆になりました。さらに悪いことは次のとおりです。

command lmnop foo bar baz

...コマンドに慣れておらず、どのパラメータがどのオプションで使用されるのかわかりません。foo、、、barおよびは、、、(および引数を取らない)の引数です。bazまたはおよびは、位置引数...または他の可能な組み合わせと一緒にすることができます。noplmfoobarmpbaz

おすすめ記事