多くのコマンドラインユーティリティは長い([1]によると「GNUスタイル」)オプションを受け入れます--version
。驚くべきことに、切り捨てられたバージョンは完全なオプションとして解釈されることがよくあります。たとえば、df
GNU 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.
この動作は意図的なものですか?その理由は何ですか?私の理解は、ほとんどのユーティリティが(または同様の)依存しているということですgetopts
。getopt
だからマンページで手がかりを見つけましたが、説明が見つかりませんでした。
[1] ESレーモンド。UNIXプログラミングの技術。ピアソン教育、Inc.、2004
ベストアンサー1
ポイントは、タイピングを保存することです。たとえば、ls --col|less -R
スペルを書かずに入力できますls --color
。
(いいえ、参考資料が見つかりません。驚いたことに、getopt_long
文書...でもないGNUコーディング標準。私はこれが民俗だと主張しています。 )
ユニバーサルシェルで長いオプションの完成をサポートすることはもはや役に立ちませんが、コマンドのカスタムコンプリートサポートは自動ではなく、bash(GNUシェル)のカスタムコンプリートサポートはgetopt_long
約20年後に実装されました(1980年代初めから1990年代後半まで) IIRC)。