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


101

例:

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

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

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

    cd -

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

    nc -l -p 12345 | tar xvzf -

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

回答:


111

コマンド-の最後でネイキッドを意味する場合tar、それはファイルを使用したい多くのコマンドで一般的です。

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

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

ではcdコマンド、ディレクトリを変更するたびに、それはあなたがどこから来たディレクトリを格納します。その場合はcd特別で-、「ディレクトリ名」、ではなく現実のものとは覚えていたディレクトリを使用しています。これを使用すると、2つのディレクトリを簡単にすばやく切り替えることができます。

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


9
-gitブランチにも使用できることに注意してください。つまり、前のブランチに切り替えることができますgit checkout -
snappieT

3
tarドキュメントのどこでサポートされていると説明されていますか?どのコマンドがそれをサポートしているかをどうやって知るのですか?

1
コマンドにの特別な意味がある場合、-その説明はmanページにあります。
codeforester 2017年

su-#シェルをログインシェルにする
atongsa '27

私は次のようなコマンドを非常に好奇心が強いと感じます:tar -cvf-/ home | aescrypt -e -p apples-> backup_files.tar.aes実際にはtar -cvf-/ home | aescrypt -e -p apples -o backup_files.tar.aes-パイプ文字| 最後のダッシュの存在を不要にする必要があります。しかし、最後のダッシュがないと、コマンドは失敗します。非論理的に聞こえます。誰かが私にコマンドラインでの裸のダッシュの意味が説明されているリファレンスを教えてもらえますか?何も見つかりません。
elmclose

22

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


9
の場合を除いてcd -; あなたが書いたかのようにbash(1)扱いcd -ますcd $OLDPWD
sarnold

6
@sarnoldしかし、要点は同じですcd-シェル組み込みコマンド-はダッシュ自体を解釈します。「マジック」なし:-)

2
@pst、確かに、魔法はありません(すべてコードだけです:)が、シェルに特別なものがあります。
sarnold

13

かへリダイレクトstdinまたはstdout

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


いつものように、ABSは一粒の塩とともに摂取する必要があります。例えば、それはリダイレクトがここにあることを意味しますが、これはシェルのリダイレクト演算子(とは区別される<>|、など)。
3

9

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

何の魔法がある-文字は限りシェルが懸念されるとして(ことを除いて、シェル自体、およびいくつかのそのようなコマンドを内蔵cdしてecho、それは従来の方法で使用します)。以下のようないくつかの文字、\'、と"ある彼らが表示される場所に特別な意味を持つ、「魔法」。これらは「シェルメタキャラクター」です。 -そうではありません。

特定のコマンドの使用方法を確認するには-そのコマンドのドキュメントをご覧ください。


7

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


文字通りの表現から話し方を識別する人々の能力を過大評価しないでください。これは数千年の間続いていません。
3

1
@tripleee-確かに、数十億秒間続いています。;-)
デビッドRトリブル

5

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

の場合はcd、別の意味になります。以前の作業ディレクトリに変更します。

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