web-dev-qa-db-ja.com

オプションフラグをtarに渡すために余分なダッシュ(-)を使用するのはなぜですか?

ディレクトリのtarファイルを作成するには、tarcompressverboseオプションを指定したfileコマンドを次のように入力します。

$ tar -cvf my.tar my_directory/

しかし、それは次のように行うこともできます:

 $ tar cvf my.tar my_directory/

つまり、オプションの前にダッシュ(-)を付けません。なぜオプションリストにダッシュ(-)を渡すのですか?

35
Milktrader

UNIXアプリケーションでこれまで使用されてきたオプションには、いくつかの異なるパターンがあります。 tarのようないくつかの古いものは位置スキームを使用します:

コマンドオプション引数

たとえばtarは

tar * something * f "操作されるファイル" * "操作するファイルのパス" *

混乱を避けるための最初の試みでは、tarと、古いflags-argumentsスタイルを使用する他のいくつかのプログラムでは、フラグをダッシュ​​で区切ることができましたが、ほとんどの古い人は単にそれを無視しました。

他のいくつかのコマンドには、フラグ、等号、パス名、引数、梨の木のパートリッジを使用するdd(1)のような、より複雑なコマンドライン構文があり、すべてワイルドバンドンです。

BSDおよびそれ以降のバージョンのunixでは、これは多かれ少なかれ「-」でマークされた単一文字のフラグに収束していましたが、これはいくつかの問題を引き起こし始めました:

  • フラグは覚えにくいかもしれません
  • 時々あなたは実際に「-」で名前を使いたかった
  • 特にGNUツールでは、可能なフラグの数によって制限が課せられ始めました。そのため、GNU追加されたツールGNU = --outputのような長いオプション。

次に、Sunは余分な「-」は冗長であると判断し、単一の「-」を含む長い形式のフラグの使用を開始しました。

そして、それが現在の混乱の原因となったのです。

44
Charlie Martin

UNIXの標準的な方法でtarオプションを指定できますtar -c -f foo -v -B file1 file2 file3ここで、オプションとパラメータ、またはコマンドラインの最後にあるファイル名を区別するためにダッシュが必要です。または、すべてのオプションを最初の引数にまとめることができます。その場合、ダッシュはオプションです。

次にpsがあり、SysV-ishオプションを使用している場合はダッシュを使用し、BSD-ishオプションを使用している場合はダッシュを省略して、混乱を招きやすくしています。

そして、findについてさえ話をさせません。

8
Paul Tomblin

ダッシュは、オプションパラメータの名前と値を明確にするために使用されます。それはもっと標準的な慣習だと思います。

2
Darin Dimitrov