2011-11-08 40 views
60

例子:命令行參數中的「 - 」(破折號)有什麼魔力?

  • 創建一個ISO映像,並直接將其刻錄到CD上。

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

  • 切換到上一個目錄。

    cd -

  • 監聽端口12345和發送給它解壓縮數據。

    nc -l -p 12345 | tar xvzf -

什麼是儀表板的目的,如何使用它?

回答

71

如果您的意思是tar命令末尾的裸體-,那麼在許多要使用文件的命令中這是很常見的。

它允許您指定標準輸入或輸出,而不是實際文件名。

第一個和第三個例子就是這種情況。例如,cdrecord命令將採用標準輸入(由mkisofs生成的ISO圖像流)並將其直接寫入/dev/dvdrw

使用cd命令,每次更改目錄時,都會存儲您來自的目錄。如果您使用特殊的-「目錄名稱」執行cd,它將使用該記憶的目錄而不是真實的目錄。通過使用它你可以很容易地在兩個目錄之間切換。

其他命令可將-視爲不同特殊值。

+0

對我很明顯,非常感謝。 – chemila

+4

注意,你也可以使用'-'作爲git分支,也就是說你可以用'git checkout -'切回到你以前的分支。' – snappieT

+3

tar文檔中的哪個地方解釋它支持?我如何知道哪些命令支持它? –

4

它意味着使用程序的標準輸入流。

cd的情況下,它意味着有所不同 - 更改爲上一個工作目錄。

11

這不是魔術。有些命令將-解釋爲用戶想從標準輸入讀取或寫入標準輸出;對殼來說沒有什麼特別的。

+6

除'cd -'的情況外; 'bash(1)'處理'cd -',就好像你寫了'cd $ OLDPWD'一樣。 – sarnold

+4

@sarnold但重點是相同的,'cd' - 一個shell內置命令 - 解釋破折號本身。沒有「魔術」:-) – 2011-11-08 03:12:24

+1

@pst,當然,沒有魔法(這些都只是代碼:),但是對於shell來說有一些特別的東西。 – sarnold

5

神奇的是該公約。數千年來,人們使用' - '來區分選項和參數,並且在文件名中使用' - '來表示適當的stdin或stdout。不要低估會議的力量!

5

-意味着每個命令想要它的意思。有幾個常見的約定,並且您在其他答案中已經看到了其中大多數的例子,但其中沒有一個是100%通用的。

沒有什麼魔術有關-字符至於外殼而言(除了外殼本身,有的像cdecho其內置的命令,用它在傳統的方式)。一些字符,如\,'",「神奇」,無論它們出現在哪裏都有特殊的含義。這些是「shell元字符」。 -不是那樣的。

要查看給定命令如何使用-,,請閱讀該命令的文檔

相關問題