web-dev-qa-db-ja.com

コマンドラインパラメータの「-」(ダッシュ)の魔法とは何ですか?

例:

  • ISOイメージを作成し、CDに直接書き込みます。

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • 前のディレクトリに移動します。

    cd -

  • ポート12345でリッスンし、送信されたデータを展開します。

    nc -l -p 12345 | tar xvzf -

ダッシュの目的は何ですか?また、どのように使用しますか?

87
chemila

tarコマンドの末尾にある裸の-を意味する場合、それはファイルを使用したい多くのコマンドで一般的です。

実際のファイル名ではなく、標準の入力または出力を指定できます。

それは、最初と3番目の例の場合です。たとえば、cdrecordコマンドは標準入力(mkisofsによって生成されるISOイメージストリーム)を取得し、/dev/dvdrwに直接書き込みます。

cdコマンドを使用すると、ディレクトリを変更するたびに、元のディレクトリが保存されます。特別な- "ディレクトリ名"でcdを実行すると、実際のディレクトリではなく、その記憶されたディレクトリが使用されます。これを使用することで、2つのディレクトリを非常にすばやく簡単に切り替えることができます。

他のコマンドは、-異なる特別な値として扱う場合があります。

95
paxdiablo

それは魔法ではありません。一部のコマンドは、-を、stdinからの読み取りまたはstdoutへの書き込みを希望するユーザーとして解釈します。シェルにとって特別なことは何もありません。

stdinまたはstdoutとの間のリダイレクト。

参照: http://tldp.org/LDP/abs/html/special-chars.html#DASHREF2

12
Ry-

魔法はコンベンションにあります。何千年もの間、人々はオプションと引数を区別するために「-」を使用し、必要に応じてファイル名に「-」を使用してstdinまたはstdoutを意味していました。コンベンションの力を過小評価しないでください!

6
William Pursell

-は、各コマンドが意味するとおりのものを意味します。いくつかの一般的な慣習があり、それらのほとんどの例を他の回答で見ましたが、100%普遍的なものはありません。

シェルに関する限り、-文字には魔法はありません(シェル自体と、cdechoなどの組み込みコマンドの一部を除き、従来の方法で)。 \'、および"などの一部の文字は、are "magical"で、表示される場所に特別な意味があります。これらは「シェルメタキャラクター」です。 -はそうではありません。

特定のコマンドで-がどのように使用されるかを確認するには、そのコマンドのドキュメントを読んでください

6
Keith Thompson

プログラムの標準入力ストリームを使用することを意味します。

cdの場合、それは何か異なることを意味します:前の作業ディレクトリに変更します。

4
Brian Cain