ショートオプションとロングオプションの違いはただ「-」ですか?

ショートオプションとロングオプションの違いはただ「-」ですか?

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&Tgetopt()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 Shellgetopts(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

関連情報