一部のプログラムではコマンドプロンプトパラメーターの前に2つのダッシュが必要なのに対し、一部の(ほとんどの)では前に1つだけダッシュが必要なのはなぜですか?
たとえば、ほとんどのプログラムは次のようになります:relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
一方、一部のプログラムは次のようになります:xmllint --valid toc.xml --noout
一部が1つではなく2つのダッシュを必要とする理由は何ですか?全員が1つの標準に固執することは理にかなっていない(つまり、1つのダッシュで十分です)。
ls --help
を実行して、オプションを確認してください。それはあなたにとって明白なはずです。
パラメータとは何の関係もありません。多くのオプションには短い形式と長い形式があり、多くのオプションには一方があり、もう一方はありません。
また、パラメーターに関しては、長い形式では、パラメーターを受け取ると、常に等号があるように見えます。しかし、明らかに短いものは同じくらいパラメータを取ることができます。等号を使用しないだけです。
これはls --help
からの抜粋です( man ls
は同等の情報を提供します)。一部には、短い形式のない長い形式(--author
、--block-size
)があり、一部の形式には、長い形式のない短い形式(-c
、-f
、-g
)、一部には長い形式と短い形式の両方があります(-A
/--almost-all
、-b
/--escape
)。
-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 ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information)
with -l: show ctime and sort by name
otherwise: sort by ctime
-C list entries by columns
--color[=WHEN] control whether color is used to distinguish file
types. WHEN may be `never', `always', or `auto'
広く普及している標準はありません。いくつかの一貫性があります。 GNUプログラムにありますが、各プログラムのドキュメントを確認する必要があります。
引用 Wikipedia 、強調鉱山:
Unixライクなシステムでは、ASCIIハイフン-マイナスが一般的にオプションの指定に使用されます。通常、文字の後に1つ以上の文字が続きます。通常、文字のない単一のハイフンマイナスの引数は、プログラムが標準入力からのデータを処理するか、標準出力にデータを送信することを指定します一部のプログラムでは、2つのハイフンマイナス文字(-)を使用して、より詳細なオプション名が使用される「長いオプション」を指定します。これは、GNUソフトウェア。
通常、ハイフンは定義済みの引数を示します。私はそれをそれらから区別するために使用されていると思います。引数として使用するファイル名またはその他のラベル。ただし、常にそうであるとは限りません(以下を参照)。
多くの場合、同じオプションが短いオプションと長いオプションの両方として利用可能です。で ls 。
一部のプログラムでは、1文字のオプションには単一のハイフンを使用し、複数文字のオプションには2つのハイフンを使用しますが、すべてではありません(GNU find
が思い浮かびます)。一部のプログラムには、オプションのハイフンがあるか、完全にスキップされます(tar
またはBSD ps
が思い浮かびます)。
長いオプション(--foo
)は引数が必要ですが、短いオプション(-f
)しない(または少なくとも特定のデフォルト引数を意味する)。
短いオプション(例:cut -d ' '
)は引数を持つことができますが、長いオプション(例:ls --all
)必ずしも必要ではありません。
プログラムの特定の動作を設定するには、短いオプションを使用する必要がある場合もあれば、長いオプションを使用する必要がある場合や、選択肢がある場合もあります。
関連する注記として、一部のプログラムは オプションとその引数の間に空白なし を処理できますが、他のプログラムは処理できません。
最初に書いたように、共通の動作や標準はありません。多くの場合、引数の解析に使用される同じライブラリの同様の動作を追跡できますが、これを見つけるためにソースを読みたくない場合があります。
あるプログラムの引数構文を別のプログラムの引数構文から推測することはできません。
Windowsも考慮すると、さらに悪化します。Windowsのコマンドライン呼び出しは従来、/f
(少なくともほとんどの場合、1文字)オプションの場合、:
オプションとその値の間の区切り文字として(例 here を参照);クロスプラットフォームユーティリティは(あなたが言及したものなど)広く普及しており、引数のより一般的なハイフン構文をもたらします。
これは* nixからの規約です。二重ハイフンはオプションが書き込まれるときにオプションの前に置かれますin full、、単一ハイフンはオプションが書き込まれるときにオプションの前に置かれます短い形式。たとえば、ls --all --l
はls -al
に短縮できます。ご覧のとおり、すべてのオプションに対応する1文字があるわけではありませんが、使用頻度の高いオプションには通常あります。
オプションが引数を取るかどうかは、実際には違いはありません。オプションの入力方法に関係なく、引数を取る場合と受け取らない場合があります。
一度だけ使用する場合は問題ありませんが、たとえば.aliasファイルにコマンドを書き込む場合は、通常は完全な形式を使用します。純粋に次の人の読みやすさのために。
これらは従来のUNIX構文です。
プログラムの引数は、単純なオプション(例:-v)の場合は1つのハイフン( "-")の後に1文字が続き、オプションが引数(例: :-file toc.xmlまたは-file = toc.xml)
プログラムの機能に影響はありません。
単一のダッシュはgetoptによって実装され、posix標準関数です。二重ダッシュはgetopt_longにあり、GNU標準です。
従来、単一のダッシュは、次のような単一の文字オプションを提供します。
-Aまたは-Vなどですが、これに限定する必要はありません。例えば-Wall for gccは、gccコンパイラーコマンドのすべてのコンパイラー警告をオンにします。
二重ダッシュ引数はより冗長になる傾向があり、多くの場合--max-count = NUMのような指定されたパラメーターを取ります。ただし、-versionは同等ではありません。
一般的に言って、プログラムの引数をどのように指定するかについての規則や定義された標準はなく、単なる伝統です。ただし、getoptおよびgetopt_longコマンドライン解析関数を使用する場合、ライブラリ関数は特定の方法で実行するため、パラメーターは一般に標準に従う必要があります。