Unix
システムでoptionで始まるオプションは-
短いオプションで、optionで始まるオプションは--
長いオプションです。私の理解は正しいですか?
答え1
これはGNUコーディング標準の一部であるため、すべてのGNU(および多くの非GNU)ソフトウェアがそれに従います。しかし、これは決して絶対的な基準ではありません。これを達成する他の方法は次のとおりです。
-Wlong-option
:C コンパイラから派生し、POSIX で指定されました。-long-option
(例:シングルダッシュ):短いオプションがないほとんどのアプリでサポートされています(通常はデュアルダッシュバージョンの代替として)。+long-option
: これは廃止予定ですが、短いオプションにはダッシュを保持し、長いオプションにはプラスを維持するいくつかの古いパッケージがあります。今日はあまり使われていません。主に、ほとんどのgetopt()実装はそれをサポートしていないためです。long-option
:残念ながら混乱するアプリもあります。オプションそして議論。私はMegaCLIが犯人の1つだと思います(とにかくほぼすべての点で犯人です)。
答え2
この--long-opt
アプローチは1990年頃にGNUismによって開始されました。
Multics
-long
単一ダッシュオプションを使用して、Multicsプロジェクトが1960年代に開始されました。
UNOS
最初のUNIX
クローン(1980年前にAT&T社員グループによって開始)で、1982年4月にUNOS
汎用オプションパーサー(世界初UNIX
)を発売しました。オプションパーサーは-long
単一ダッシュを持つオプションをサポートします。
AT&T
getopt()
1983年から1984年の間に導入されたが、getopt()
1989年に組み込まれたBourne Shellの追加の4番目のグローバル変数が導入される前は、再進入は不可能でしたgetopts
。
POSIX
実装はダッシュtest
ですfind
AT&T UNIX
-long
単一ダッシュを使用するオプションはkill -INT <pid>
1983年頃に導入されました。
tar
そして、この用語はドキュメントでまったく使用されar
ていませんが、option
代わりにkeyletter
。後で、実装者は無視されたキー文字のサポートを追加し、-
CLIが他のUNIXコマンドのように見えることを印象づけました。
dd
独自のオプションモデルを使用しますが、このオプションモデルは、長期オプションをUNOS
次のように定義する長期オプションモデルと互換性があります。
-long
-long arg
long=arg
-long=arg
long= arg
-long= arg
オプションUNOS
パーサーは、整数およびブール引数の自動変換を可能にし、必要に応じてすべてのオプションに対してコールバック関数を実装できる形式文字列を使用するため、GNU longopt実装よりも優れています。コールバック関数インタフェースのため、パラメータリストを並べ替える必要はありません。
Solarisの実装では、2004年以来、短いオプションのエイリアスとして長いオプションをサポートしていましたが、導入後にviaを通じて使用できgetopt()
ましたが、実際には文書化されていませんでした。Bourne Shell
getopts(1)
Schily Bourne Shell
この機能は文書化されており、getopt()
長いオプションが短いオプションのエイリアス以上になり、単一のダッシュ長いオプションも許可するように追加の改善が導入されました。
バラよりhttp://schillix.sourceforge.net/man/man1/bosh.1.html組み込みコマンドセクションでgetopts.
オプションパーサーのアイデアに基づいてUNOS
近代化され、強化されたオプションパーサーはschily-toolsにあります。libschily/getargs.c
http://sourceforge.net/projects/schilytools/files/
AT&T コードに基づいていない schily ユーティリティプログラムで使用され、不適切な名前でオプションを定義する問題を軽減します。mkisofs