シェルコマンドのシングルダッシュフラグとダブルダッシュフラグの違いは何ですか?


70

私はシェルで作業するのが初めてなので、これらのコマンドの使用はarbitrary意的です。1つのフラグに単一のダッシュがあり、別のフラグに二重のダッシュがある可能性がある理由はありますか?


POSIX標準に支配されることになっています:iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html
CJC

そのリンクは現在404 @cjcです:(おそらく、より信頼性の高いリンクは以下のようになりen.wikipedia.org/wiki/POSIX
ベルンハルトホフマン

回答:


110

単一のハイフンの後には、複数の単一文字フラグを続けることができます。二重ハイフンは、単一の複数文字オプションの前に付けられます。

この例を考えてみましょう:

tar -czf

この例では、-czf3つの文字のフラグを指定していますczf

次に、別の例を考えます。

tar --exclude

この場合、--excludeという名前の単一の複数文字オプションを指定しますexclude。ダブルハイフンはそれが確実に、コマンドライン引数を曖昧性を除去tar、それとして解釈excludeではなく、組み合わせexclud、およびをe


1
@kylex、いいえ、「c」という名前の長いオプションはなく、-は長いオプションを意味し、1文字のオプションではありません。
-psusi

13
場合によっては、長いコマンドであっても一重ダッシュにすることができます。たとえば、「cdrecord」では、すべての単一ダッシュコマンド(-eject -dao ...)が使用されます。それはすべてプログラムに依存しますが、それらのほとんど(!)は-単一および-複数文字(長い)コマンドに使用します
-mulaz

8
@mulaz、はい、cdrecordはかなりの間抜けなことをします。
-psusi

10
また、念頭に置いてください-通常、単独で使用すると、オプションの終了を意味します。詳細については、こちらをご覧ください:unix.stackexchange.com/questions/11376/…–
Sirex

3
@killjoy、無知か選択かを問わず、これらのプログラムの作者はもちろん慣習に従わなかったからです。同じようにcdrecord上記のコメントで年前に言及しました。
-psusi

17

それはすべてプログラムに依存します。通常、「-」は「短い」オプション(1文字、-h)に使用され、「-」は「長い」(er)オプションに使用されます(--help)。

通常、短いオプションは組み合わせることができます(「-h -a」は「-ha」と同じです)

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

ソース


2
それでは、なぜjava -versionとant -versionなのでしょうか?
-killjoy

7

それは本当に慣習です。ただし、これはパーサーがプログラムに渡されるオプションについてより効率的に知るのに役立ちます。さらに、これらのコマンドの解析に役立つきちんとしたユーティリティ、getopt(3)またはgetopt_long(3)プログラムの引数の解析に役立つ非標準のユーティリティがあります。

他の答えが言うように、複数の短いオプションを組み合わせることができるので、それは素晴らしいですtar -xzf myfile.tar.gz

に「lisa」という引数があった場合ls、おそらく入力とは異なる意味がls -lisaありls --lisaます。前者はあるlis、およびaパラメータではなく、言葉。

実際、を書くこともできますがls -l -i -s -a、これはとまったく同じ意味ですがls -lisa、それはプログラムによって異なります。

この規則に従わないプログラムもあります。最も顕著なのは私の視力のために、ddgcc


3

シングルダッシュの短いオプションとダブルダッシュの長いオプション

短いオプションは、単一の引数に結合できます。

for example: ls -lrt #instead of ls -l -r -t

単一のダッシュで長いオプションを許可すると、あいまいさが生じます。これを解決するには、長いオプションに二重ダッシュを使用します。

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