文字に単一のダッシュを使用し、単語に二重のダッシュを使用するという慣習はどこから来たのですか、なぜ引き続き使用されているのですか?
たとえば、ls --help
、 分かりますか:
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
グーグルで試しました- and -- convention
引用符を付けてもほとんど成功しません。
The Art of Unix Programming Eric Steven Raymondが、この実践がどのように進化したかを説明します。
元のUnixの伝統では、コマンドラインオプションは単一のハイフンが前に付いた1文字です...元のUnixスタイルは、簡潔さを美徳にする遅いASR-33テレタイプで進化しました。したがって、1文字のオプションです。シフトキーを押し続けるには、実際の努力が必要でした。したがって、小文字を優先し、オプションを有効にするために(おそらくより論理的な「+」ではなく)「-」を使用します。
GNUスタイルは、2つのハイフンが前に付いたオプションキーワード(キーワード文字ではなく)を使用します。かなり複雑なGNU =ユーティリティが1文字のオプションキーを使い果たし始めた(これは症状のパッチであり、根本的な病気の治療法ではありません)。 GNUオプションは、古いスタイルのアルファベットのスープよりも読みやすいため、人気があります。 1
[1] http://www.catb.org/esr/writings/taoup/html/ch10s05.html
単一文字のオプションを使い続ける理由の1つは、それらを一緒に組み合わせることができるためです:ls -ltr
はlotより簡単に入力できますls --sort=time --reverse --format=long
。両方を使用するのが適切な場合がいくつかあります。このトピックの検索については、「UNIXコマンドラインオプションの規則」を試してください。
@jasonwryanによる Raymondからの引用 にはいくつかの有用な情報がありますが、ストーリーの途中から始まります。
'-'
オプション文字がMulticsで使用されました。ビットセーバーには ユーザーコマンド のマニュアルがあります。'/'
など)と、それより少ないもの(VM/SP CMSに使用される'('
など)があります。-print
と-pr
(3-8ページ)のように、短くて省略した形式になることがよくあります。getopt
が導入されました。元のUnixの一部ではなかったため、getopt
を使用せずにそのままにされたユーティリティがあります。しかし、getopt
があることは、プログラムの一貫性を保つのに役立ちました。一方、getopt
を使用するUnixオプションは単一文字でした。他のシステム、特にすべてのシステムでは、キーワードが使用されていました。一部(すべてではない)では、これらのキーワードを省略することができました。つまり、オプションが明確である限り、すべての文字が提供されるわけではありません。あいまいさのテストには落とし穴があります。例えば:
sta
と入力して、status
を取得しようと思いました。これはstart
の省略形であり、startに何も指定しなかったため、コマンドインタープリターによってログオフされました。-v
(ビジュアルベル)よりも-vb
(バージョンの場合)を優先するようにコマンドパラメーターを前処理する必要があります。 Xツールキットには、あいまいな場合に優先オプションを指定する直接的な方法はありません。このあいまいさの可能性があるため、一部の開発者は略語を許可しないことを好みます。 Lynx たとえば、略語を許可せずに複数文字のオプションを使用します。
すべてのプログラムがgetopt
を使用したわけではありません:tar
およびps
は使用しませんでした。 rcs
(または sccs
)もそうではありませんでした。ダッシュがオプションで、オプション値がオプションであった場所に注意してください。
これらすべてを考慮に入れて、GNU開発者は、getopt
を拡張して各短いオプションの長いバージョンを提供することにより、他のシステムで使用されるキーワードオプションを適合させました。たとえば、textutils 1.0 changelog言う
Tue May 8 03:41:42 1990 David J. MacKenzie (djm at abyss)
* tac.c: Use regular expressions as the record boundaries.
Give better error messages.
Reformat code and make it more readable.
(main): Use getopt_long to parse options.
Fileutilsの変更は以前のものでした。
Tue Oct 31 02:03:32 1989 David J. MacKenzie (djm at spiff)
* ls.c (decode_switches): Add long options, using getopt_long
instead of getopt.
そして誰かがまだもっと早くそれを見つけるかもしれませんが、ファイルヘッダーは最も古い日付を示しているようです:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
これは(たとえば)X Toolkit(1987)と並行しています。慣れているほとんどのUnixユーティリティ( ls
、 ps
など)は、必要な既存の単一文字オプションを使用していました定期的にマニュアルをご覧ください。 getopt_long
を導入するとき、GNU開発者はこれをfirst新しいオプションを追加することでこれを行いませんでした;それらbegan既存のオプションを表にして、一致する長いオプションを提供します。
それらは既存のレパートリーにaddingであったため、(再び)既存のオプションとの競合の問題がありました。これを回避するために、長いオプションの前に2つのダッシュを使用して構文を変更しました。
これらのプログラムは、通常の理由により、この方法でgetopt_long
を引き続き使用します。
ウィキペディアで コマンドラインインターフェイス 報告されています:
Unixライクなシステムでは、ASCIIハイフンマイナスは、オプションを指定するために一般的に使用されます。通常、文字の後に1つ以上の文字が続きます。単一のハイフンマイナスである引数自体は、通常、任意の文字は、プログラムが標準入力からのデータを処理するか、データを標準出力に送信することを指定します。一部のプログラムでは、2つのハイフンマイナス文字(-)を使用して、より詳細なオプション名が使用される「長いオプション」を指定します。これはGNUソフトウェアの共通機能です。
私の推測では、より説明的なオプションが望まれており、長いオプションを使用すれば、1文字のオプションが不足することを心配する必要はないでしょう。
長いオプションが必要だと判断したら、少なくとも長いオプションと短いオプションの両方をサポートすることを計画している場合は、問題があります。私は前向きではありませんが、なぜか-と-については、argegeの回答が鍵を握ると思います。一般的な処理ルーチン。 getopt_long()は、単一のコマンドライン引数に複数のオプションを含めることができるかどうかを知る必要があります。 -ltr。したがって、処理ルーチンは2つを区別できる必要があります。単一のダッシュ-を読んだ場合、コマンドライン引数の残りの部分は複数のオプションと一致する可能性があります。二重ダッシュ-を読んだ場合、コマンドライン引数の残りの部分は単一のオプションと一致する必要があります。
最近getopt_long()を使用しましたが、覚えやすく自己文書化できるため、長いオプションが好きになり始めています。次の2つのコマンドがあるとします。
./aggregator -f 15
./aggregator --flush-time 15
長いオプションを使用する2番目の方法は自明です。
2つの方法が使用される理由はおそらくいくつかあります。もちろん、一つは伝統です。プログラマーとユーザーは人間であり、人間は物事が特定の方法で機能することを期待しています。変更する理由がない場合(そして、コマンドラインの場合、変更する理由があまりない場合)は、変更しないでください。
そうは言っても、長いオプションに単一のハイフンを使用したり、ハイフンを完全に削除したりするツールがあることは知っています。これらのツールは最初は難しい場合があり、統一されていないシステムでは、いぼとして突き出る傾向があります。
2つの違いを学習していたとき(それが第二の性質になる前)、「短い」ハイフンは「短い」オプションに一致し、「長い」(または二重の)ハイフンは「長い」に一致することを常に覚えています。オプション。ダブルハイフンスタイルの開発でその推論が使用されたかどうかはわかりませんが、それは可能性です。