@jasonwryanによるRaymondからの引用には、いくつかの有用な情報がありますが、ストーリーの途中から始まります。
- UnixはMulticsの縮小スコープバージョンとして始まり、Unixの歴史を通じて、Unixの機能は他のシステムで見られ、使用されていた機能の模倣または適応であることが多いことに留意してください。
'-'
オプション文字は、Multicsの中で使用されました。Bitsaversには、ユーザーコマンドのマニュアルがあります。
- 他のシステムでは異なる文字を使用し、キーストローク効率が高いと主張するもの(
'/'
TOPSやVMSで使用されるものなど)とそうでないもの('('
VM / SP CMSで使用されるものなど)があります。
- Multics オプションは複数文字でした。たとえば、アンダースコアで区切られたキーワードです。
- 長いMulticsオプションは、
-print
vs -pr
(3-8ページ)のように、短く短縮された形式であることがよくありました。
- Unixオプションは単一文字であり、数年後
getopt
に導入されました。元のUnixの一部ではなかったためgetopt
、使用せずにそのままにしておいたユーティリティがあります。しかしgetopt
、プログラムの一貫性を保つことに貢献したこと。
一方、Unixオプションgetopt
は単一文字でした。他のシステム、特にすべてがより大きなシステムでは、キーワードを使用していました。一部(すべてではない)でこれらのキーワードを省略できました。つまり、オプションが明確である限り、すべての文字が提供されるわけではありません。そのテストにはあいまいさの落とし穴があります。例えば:
- 1985年の初め、私はPrimOSに移植しなければならないプログラムに取り組んでいました。プライムの開発者は、他の各社を模倣(試行)し、各社から最もよく使用されるコマンドを提供するコマンド言語を提供することにより、他のいくつかの企業と競争しました。もちろん、略語をサポートしました(VMSと同様)。オンラインヘルプを読んだ後
sta
、を取得しようと入力しましたstatus
。これはの略語でstart
、開始するものを何も与えなかったため、コマンドインタープリターはログオフしました。
- Xツールキット(xtermで使用)では、省略オプションを使用できます。これをxtermで効果的に使用するには、コマンドパラメーターを前処理して
-v
(バージョンの場合)-vb
(ビジュアルベル)よりも優先させる必要があります。Xツールキットには、あいまいさがある場合に優先オプションを指定する直接的な方法はありません。
このあいまいさの可能性のために、一部の開発者は略語を許可しないことを好みます。 たとえば、Lynxは略語を許可せずに複数文字オプションを使用します。
いないすべてのプログラムを使用getopt
:tar
してps
ませんでした。ダッシュがオプションであり、オプションの値がオプションであった場所に注目するとわかるように、rcs
(またはsccs
)もしませんでした。
これらすべてを考慮に入れて、GNU開発者は他のシステムで使用されているキーワードオプションをgetopt
、各短いオプションの長いバージョンを提供するように拡張することにより適合させました。たとえば、textutils 1.0の変更ログには
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開発者は最初に新しいオプションを追加することでこれを行いませんでした。彼らは、既存のオプションを集計し、一致する長いオプションを提供することから始めました。
それらが既存のレパートリーに追加されていたため、(再び)既存のオプションとの競合の問題がありました。これを避けるため、長いオプションの前に2つのダッシュを使用して構文を変更しました。
これらのプログラムはgetopt_long
、通常の理由でこの方法で引き続き使用されます。
- スクリプトはオプションに依存します。開発者はスクリプトを壊そうとはしません
- 文書化されたコーディング標準があります(効果的かもしれません)
- 著しく互換性のない競合ツールのセットをだれも作成していません(BSDとGNU開発者の両方が互いからオプション名をコピーします)
-
技術的にはハイフンと呼ばれています。ほとんどの場合、「ダッシュ」という言葉を使用してemダッシュ(—)を参照し、場合によってはenダッシュ(–)を参照しますが、どちらもハイフン(-)ではありません。