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


65

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

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

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

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


10
>誰もが1つの標準に固執するのは理にかなっていない -はい。すべてのプログラマーは標準に固執し、一貫性を保ちますか?いいえ。多くのプログラマは、さらに内の一貫性を維持することはできません彼ら例えば、言われていること、コンセンサスが唯一の文字オプションの1つのダッシュを使用するようになり、実際に言葉であることすべてのための2つのダッシュ:)のプログラムを-i--input-n --dry-run
slhck

1
@slhck助けてくれてありがとう=)その慣習で、それ-dtdは本当にあるべきだったということ--dtdですか?事実上私が疑問に思ったことは、ダッシュ(およびダブルダッシュ)が何意味しようとしているのか?
Pacerier

6
ボーナスポイントの場合:Gnu標準に準拠するプログラム--long-optionsは、一意の略語も受け入れます。そのため、オプション--file-inとを含むプログラムでは、またはを--file-out使用できます。これにより、の入力を節約できます。--file-o=foo--file-i=foo--very-long-optional-parameters
BRPocock

GNUは、(私が好むように起こる「長い」オプションのための2つのダッシュを使用しての彼らの慣習と一緒に来ますが、そのようなXウィンドウシステムにバンドルされているような多くの古いユーティリティ、だけでなく、ImageMagickの例えばconvertmogrify「長い」持っています)単一のダッシュのみを使用するオプション。例:xterm -fn 6x10 -geometry 80x24+30+200。略語がサポートされている、彼らは(個別のだ提供など-gまたは-geomのために-geometry)。他の例については、X(7)を参照してください。
TheDudeAbides

回答:


18

ただ、やるls --help とオプションを見て。それはあなたに明らかなはずです。

パラメーターとはまったく関係ありません。多くのオプションには短い形式と長い形式があり、多くのオプションには一方があり他方がありません。

また、パラメータに関しては、長い形式では、パラメータを受け取ると、常に等しいものがあるように見えます。ただし、明らかに短いものでも同じようにパラメーターを使用できます。等しいものを使用しないだけです。

以下はからの抜粋ですls --helpman 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'

4
ls --helpWindows上でどのように行うのですか?
Pacerier

1
@Pacerier lsWindowsにはありません。同等のコマンドはになりますdir /?。あなたは、通常のWindows規約に違反するクロスプラットフォームソフトウェアを使用しています。私の答えをご覧ください。
ダニエルベック

@Pacerier組み込みではありませんが、サードパーティのGnuwin32をダウンロードします(google gnuwin32)。gnuwin32には多数のパッケージがあり、それぞれにコマンドがあります。coreutilsパッケージをダウンロードすると、多くの一般的なコマンドが含まれています。
barlop

ls --help抜粋には短いオプションのない長いオプションがあります。--authorおよびを参照してください--block-size
ダン

@Pacerierの元のコメントの質問に答えるには:現代のWindowsシステムがlsコマンドを取得する最も一般的な方法はGITを使用することです。PATHにGITビンがあるGIT bashシェルまたはCMDウィンドウには、ls
yzorg

34

普及した標準はありません。GNUプログラムなどにはある程度の一貫性がありますが、各プログラムのドキュメントを確認する必要があります。

ウィキペディアを引用して、私を強調する:

Unixライクシステムでは、オプションを指定するためにASCIIハイフンマイナスがよく使用されます。通常、文字の後に1つ以上の文字が続きます。通常、文字なしの単一のハイフン-マイナスの引数は、通常、プログラムが標準入力からのデータを処理するか、標準出力にデータを送信することを指定します。一部のプログラムでは、2つのハイフンマイナス文字(-)を使用して、より詳細なオプション名が使用される「長いオプション」を指定します。これはGNUソフトウェアの一般的な機能です。

通常、ハイフンは事前定義された引数を示します。引数として使用するファイル名やその他のラベルと区別するために使用されていると思います。ただし、常にそうとは限りません(以下を参照)。


多くの場合、たとえばlsのように、短い引数と長いオプションの両方で同じ引数を使用できます。

一部のプログラムでは、1文字のオプションに単一のハイフンを使用し、複数文字のオプションに2つのハイフンを使用しますが、すべてではありません(GNU findが思い浮かびます)。一部のプログラムでは、オプションのハイフンを使用したり、それらを完全にスキップしたりします(tarまたはBSD psを思い浮かべます)。

長いオプション(--foo)は引数を必要とする場合がありますが、短いオプション(-f)は必要ありません(または、少なくとも特定のデフォルト引数を意味します)。

短いオプション(例cut -d ' ')は引数を持つことができますが、長いオプション(例ls --all)は必ずしも引数を持つ必要はありません。

プログラムの特定の動作を設定するには、短いオプションを使用する必要がある場合もあれば、長いオプションを使用する必要があるものと、選択できるものがある場合もあります。

関連する注意事項として、一部のプログラムはオプションとその引数の間の空白を処理できませんが、他のプログラムは処理できません。

最初に書いたように、一般的な動作や標準はありません。多くの場合、引数の解析に使用される同じライブラリと同様の動作をトレースできますが、おそらくこれを見つけるためにソースを読みたくないでしょう。

あるプログラムの引数の構文を別のプログラムの引数の構文から推測することはできません。


Windowsも考慮すると、さらに悪化します。Windowsのコマンドライン呼び出し/fでは、:オプションとその値の間の区切り文字として(従来はほとんどの場合、単一の文字を)使用します(たとえば、こちらを参照)。クロスプラットフォームユーティリティは広く使用されており(言及したものなど)、引数のより一般的なハイフン構文を持ち込み、上記のすべての矛盾があります。


2
GNU標準ライブラリは、1マイナス1文字、2マイナス多文字のオプションをマッピングする機能を提供するため、すべての新しいGNUプログラムおよびほとんどの新しいフリーソフトウェアは、一般的にこの表記法を使用します(たとえば- f、-f foo、-file、-file foo、-file = foo、-fil = foo、-fi = foo); tar、などのスローバックはpsfindこの標準が完全にゲル化する前にPOSIXによってコマンドライン構文が設定されていました。Gnu / Linuxシステムでは、少なくとも(ほぼ)常にサポートされることが合理的に安全な賭けで--helpあり、man <command>またはinfo <command>
BRPocock

GNU標準では、長い形式のない短い形式を使用するべきではなく、短い形式のない長い形式を使用すべきではないとしていますか?
barlop

find長いオプションについては「GNU規約」に従わないGNUの言及を含む、最も完全な回答であることに対する+1 (@BRPocockが指摘したように、おそらくPOSIX準拠の理由のため)。OPの質問に何らかの理由で「windows」というタグが付けられたため、DOS / Windowsコマンドラインの「スイッチ」について言及できる場合は、再度+1します。
TheDudeAbides

7

これは* nixからの規則です。オプションが完全に記述さている場合は、オプションの前にダブルハイフンが付けられ、短い形式で記述さている場合は、オプションの前にシングルハイフンが付けられます。たとえばls --all --l、に短縮できますls -al。ご覧のように、すべてのオプションに単一文字の同等物があるわけではありませんが、より多くのオプションには通常あります。

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

一度だけ使用するためにそれらを作成する場合、それは実際には問題ではありませんが、たとえば.aliasファイルにコマンドを作成する場合、フルフォームを使用するのが一般的です。純粋に次の人のために読みやすくするために。


助けてくれてありがとう、ところで、unixを* nixと入力する理由はありますか?
Pacerier

2
@Pacerier-Unixは商品名です。* nixと入力すると、実際にはすべてのUNIXおよび類似のシステムを指しますが、これらはすべての実用的な目的で同じです。しかし、ほとんどが、それは...習慣の力だ
ルーク

2
@Pacerier * nixはLinuxまたはUnixを参照できます。この「cos」が私が調べたのはしばらく前のことではないのですが、技術的には、BSDはUnixファミリーのものです。Linuxは技術的にはそうではなく、FreeBSDもそうではありません。しかし、* nixと言うと、unix / bsdとそれに似たもの、たとえばlinuxやfreebsdが含まれます。
barlop

2
速記コマンドの組み合わせに言及する場合は+1。それが本当の理由だなぜ 2つのスタイルがあります。
Ryan_S

3

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

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

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


3
また、単一のダッシュに続く単一の文字オプションを使用する多くの場合、文字をグループ化できます。たとえば、「ls -al」は「ls -a -l」と同じです。この方法で二重ダッシュオプションを組み合わせることはできません。単一文字オプションは古い標準ですが、最近では多くのコマンドが両方のタイプを取ります。たとえば、「ls --all」は「ls -a」と同じです。
ランディオリソン

3
実際、別の修正。単一ダッシュ単一文字オプションはパラメーターを取ることができますが、通常、等号とリンクされていません。たとえば、「tail -n 50」は「tail --lines = 50」に相当するファイルの最後の50行を示します。
ランディオリソン

この規則により、--noout(上記の質問で)引数を-noout持たないので実際に書かれるべきだったということですか?
Pacerier

1
パラメータに関するこの回答で述べられていることは完全に間違っています。最初の文は明らかです。最後の文は明らかです。そして、質問に答えるべき真ん中の段落は、まったく間違っています。
barlop

@RandyOrrisonは、私が等号を見たことがない単一の文字である場合..そして、あなたのポイントを詳しく説明するために、彼らはしばしばパラメーターを取ります.. wget -w 10 head -n 3 cut -b 2 !! ロードはパラメータを取ります。この答えはひどいです
barlop

3

単一のダッシュで実装されてのgetoptおよびPOSIX標準の機能である、でダブルダッシュのgetopt_longとGNU標準です。

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.