切り捨てられた長いコマンドラインオプションを許可するのはなぜですか?

切り捨てられた長いコマンドラインオプションを許可するのはなぜですか?

多くのコマンドラインユーティリティは長い([1]によると「GNUスタイル」)オプションを受け入れます--version。驚くべきことに、切り捨てられたバージョンは完全なオプションとして解釈されることがよくあります。たとえば、dfGNU Coreutils は以下を提供します。

user@computer ~ $ df --version
df (GNU coreutils) 8.32
Packaged by Gentoo (8.32-r1 (p0))
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund, David MacKenzie, and Paul Eggert.

--version--v切り捨てバリアント、、、およびを--ve変更すると、--ver同じ出力が得られます。ただし、オプションに文字を追加すると、突然そのオプションが無効であることが認識されます。--vers--versi--versio

user@computer ~ $ df --versionn
df: unrecognized option '--versionn'
Try 'df --help' for more information.

この動作は意図的なものですか?その理由は何ですか?私の理解は、ほとんどのユーティリティが(または同様の)依存しているということですgetoptsgetoptだからマンページで手がかりを見つけましたが、説明が見つかりませんでした。

[1] ESレーモンド。UNIXプログラミングの技術。ピアソン教育、Inc.、2004

ベストアンサー1

ポイントは、タイピングを保存することです。たとえば、ls --col|less -Rスペルを書かずに入力できますls --color

(いいえ、参考資料が見つかりません。驚いたことに、getopt_long文書...でもないGNUコーディング標準。私はこれが民俗だと主張しています。 )

ユニバーサルシェルで長いオプションの完成をサポートすることはもはや役に立ちませんが、コマンドのカスタムコンプリートサポートは自動ではなく、bash(GNUシェル)のカスタムコンプリートサポートはgetopt_long約20年後に実装されました(1980年代初めから1990年代後半まで) IIRC)。

おすすめ記事