web-dev-qa-db-ja.com

コマンドプロンプトパラメーターの1ダッシュと2ダッシュの違いは何ですか?

一部のプログラムではコマンドプロンプトパラメーターの前に2つのダッシュが必要なのに対し、一部の(ほとんどの)では前に1つだけダッシュが必要なのはなぜですか?

たとえば、ほとんどのプログラムは次のようになります:relaxer -dtd toc.xml toc_gr.xml toc_jp.xml

一方、一部のプログラムは次のようになります:xmllint --valid toc.xml --noout

一部が1つではなく2つのダッシュを必要とする理由は何ですか?全員が1つの標準に固執することは理にかなっていない(つまり、1つのダッシュで十分です)。

69
Pacerier

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'
21
barlop

広く普及している標準はありません。いくつかの一貫性があります。 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 を参照);クロスプラットフォームユーティリティは(あなたが言及したものなど)広く普及しており、引数のより一般的なハイフン構文をもたらします。

36
Daniel Beck

これは* nixからの規約です。二重ハイフンはオプションが書き込まれるときにオプションの前に置かれますin full、、単一ハイフンはオプションが書き込まれるときにオプションの前に置かれます短い形式。たとえば、ls --all --lls -alに短縮できます。ご覧のとおり、すべてのオプションに対応する1文字があるわけではありませんが、使用頻度の高いオプションには通常あります。

オプションが引数を取るかどうかは、実際には違いはありません。オプションの入力方法に関係なく、引数を取る場合と受け取らない場合があります。

一度だけ使用する場合は問題ありませんが、たとえば.aliasファイルにコマンドを書き込む場合は、通常は完全な形式を使用します。純粋に次の人の読みやすさのために。

7
Rook

これらは従来のUNIX構文です。

プログラムの引数は、単純なオプション(例:-v)の場合は1つのハイフン( "-")の後に1文字が続き、オプションが引数(例: :-file toc.xmlまたは-file = toc.xml

プログラムの機能に影響はありません。

3
user8228

単一のダッシュはgetoptによって実装され、posix標準関数です。二重ダッシュはgetopt_longにあり、GNU標準です。

従来、単一のダッシュは、次のような単一の文字オプションを提供します。

-Aまたは-Vなどですが、これに限定する必要はありません。例えば-Wall for gccは、gccコンパイラーコマンドのすべてのコンパイラー警告をオンにします。

二重ダッシュ引数はより冗長になる傾向があり、多くの場合--max-count = NUM​​のような指定されたパラメーターを取ります。ただし、-versionは同等ではありません。

一般的に言って、プログラムの引数をどのように指定するかについての規則や定義された標準はなく、単なる伝統です。ただし、getoptおよびgetopt_longコマンドライン解析関数を使用する場合、ライブラリ関数は特定の方法で実行するため、パラメーターは一般に標準に従う必要があります。

3
Matt H