web-dev-qa-db-ja.com

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

シェルで作業するのは初めてで、これらのコマンドの使用は恣意的です。 1つのフラグに1つのダッシュがあり、別のフラグに2つのダッシュがある理由はありますか?

79
kylex

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

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

tar -czf

この例では、-czfは、cz、およびfの3つの単一文字フラグを指定します。

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

tar --exclude

この場合、 --excludeは、excludeという名前の単一の複数文字オプションを指定します。二重ハイフンはコマンドライン引数を明確にし、tarexcludeexcluの組み合わせではなく、deとして解釈するようにします。

120
psusi

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

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

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

ソース

20
mulaz

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

tar -xzf myfile.tar.gzのような他の回答にあるように、複数の短いオプションを組み合わせることができるのはいいことです。

lsに「Lisa」引数があった場合、ls -Lisals --Lisaを入力する意味はおそらく異なるでしょう。前者はWordではなく、lis、およびaパラメータです。

実際、ls -l -i -s -als -Lisaとまったく同じ意味で記述できますが、これはプログラムによって異なります。

この規則に従わないプログラムもあります。特に私の目で見れば、ddgccです。

10
ssice

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

短いオプションは単一の引数に組み合わせることができます。

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

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

4
Premraj