
文字に単一のダッシュを使用し、単語に二重ダッシュを使用するルールはどこから来たのですか?使い続けるのはなぜですか?
たとえば、と入力すると、次のように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
引用符を使ってインターネットを検索しようとしましたが、ほとんど成功しませんでした。
答え1
存在するUnixプログラミングの芸術Eric Steven Raymondは、この慣行の発展を次のように説明しています。
もともとUnixの伝統では、コマンドラインオプションは前にハイフンが来る単一の文字でした。もともとUnixスタイルは遅いASR-33テレタイプに基づいて開発されたので、簡潔さは利点です。 Shiftキーを押し続けるとかなりの労力が必要ですので、小文字を好み、オプションを有効にするには、「-」(おそらくより論理的な「+」の代わりに)を使用してください。
GNUスタイルは、前に2つのハイフンが続くオプションキーワード(キーワード文字の代わりに)を使用します。数年後、かなり複雑な一部のGNUユーティリティでは、単一文字オプションキーが不足し始めたときに開発されました(これは症状を和らげるだけで、基礎疾患を治療しません。)。 GNUオプションは古いアルファベットスープよりも読みやすいので、まだ人気があります。1
答え2
単一文字オプションを引き続き使用する理由の 1 つは、互いにリンクできるためです。ls -ltr
はいたくさんに比べて入力が簡単ですls --sort=time --reverse --format=long
。何度も両方ともうまくいきます。このトピックを検索するには、「unixコマンドラインオプションルール」を試してください。
答え3
これレイモンド引用@jasonwryanにはいくつかの有用な情報がありますが、物語の真ん中から始まります。
- UnixはMulticsの折りたたみバージョンで始まり、歴史の中でUnixの機能はしばしば他のシステムで見て使用される機能を模倣または適用したものでした。
'-'
オプション文字は Multics で使用されます。 Bitsaversにはマニュアルがありますユーザーコマンド。- 他のシステムは他の文字を使用しますが、一部はより効率的なキーストロークを必要とするより多くの文字を使用し(例:
'/'
TOPSやVMSで使用)、一部はより少ない文字を使用します(たとえば、'('
VM / SP CMSでは使用)。 - マルチプレックスシステムオプションたとえば、下線で区切られたキーワードなどの複数文字です。
-print
長いMulticsオプションには、vs-pr
(3-8ページ)などの短い略語があることがよくあります。- Unixオプションは単一文字で、数年後
getopt
導入されました。もともとUnixの一部ではなかったため、一部のユーティリティは使用されず、getopt
そのまま残りました。ただし、getopt
これはプログラムの一貫性を維持するのに役立ちます。
一方、Unix オプションはgetopt
単一文字を使用します。他のシステム、特にすべての大規模システムではキーワードを使用します。すべてではありませんが、一部は次のキーワードを受け入れます。略称つまり、オプションが明確であれば、すべての文字が提供されるわけではありません。このファジィテストにはトラップがあります。たとえば、
- 1985年の初めに、私は次に移植されるべきプログラムを開発していました。権限オペレーティングシステム。 Primeの開発者は、他の企業を模倣する(試みた)コマンド言語を提供するために、他の多くの企業と競合し、各会社で最も一般的に使用されるコマンドを提供しました。もちろん、VMSと同様に略語もサポートしています。オンラインヘルプを読んだ後、私は
sta
それを得るかどうかを考えながら入力しましたstatus
。これはstart
何も提供しない略語です。スタート、コマンドソルバーが私をログアウトします。 - Xツールキット(byxterm) は省略形オプションを受け入れます。 xtermで効果的に使用するには、(視覚的な着信音)
-v
よりも(バージョン)を優先するようにコマンド引数を前処理する必要があります。-vb
あいまいさが存在する場合、X Toolkitには好みのオプションを指定する直接的な方法はありません。
これらの潜在的なあいまいさのために、一部の開発者は略語を許可しないことを好みます。 サルクたとえば、略語を許可せずに複数文字オプションを使用します。
すべてのプログラムが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開発者は互いのオプション名をコピーしました)。
答え4
これら2つの方法を使用するには、いくつかの理由があります。もちろん、一つは伝統です。プログラマーとユーザーは人間であり、人間は物事が特定の方法で機能することを期待しています。変更する理由がない場合(実際にコマンドラインの場合は変更する理由があまりありません)、変更しないでください。
つまり、長いオプションに単一のハイフンを使用したり、ハイフンを完全に削除したりできるツールがあることに注意してください。これらのツールは最初は難しいかもしれませんが、統合システムでは目立つ傾向があります。
2つの違いを学ぶとき(第2の天性になる前に)、私は常に「短い」ハイフンが「短い」オプションと一致し、「長い」(または二重)ハイフンが「長い」オプションと一致することを覚えています」オプションがオプションと一致します。二重ハイフンスタイルを開発するとき、これらの推論が使用されたかどうかはわかりませんが、可能です。