2016-04-03 23 views
0

我試圖複製「ls」的命令下應該採取之間的任何0和2個參數,它們是文件路徑和一組標誌的衝突。當1個參數傳遞,我想傳遞一個文件並通過一組標誌來區分 - 我還以爲明顯的路要走,它是假設沒有文件名稱以「 - 」字符等,因此,如果參數的第一個字符是「 - 」,然後把它作爲一組標誌,否則把它當作一個文件路徑。使用「 - 」開始的文件,而不是與標誌

我應如何真正區分這兩個?

+2

'--'用於結束開關並消除模糊性。否則'ls'只是假設開關。 –

+2

不要寫自己的一切。使用'getopt'庫。 – Olaf

回答

2

良好,LS的規則是 - 考慮-a是一個文件:

  • ls -a-a被認爲是一個選項參數;
  • ls -- -a-a被視爲一個文件參數

--說法被認爲是一個分隔符,之後所有的參數都是文件,而不是選擇。

+0

完美,謝謝:) – bhope

2

通常,程序不需要,並將其留給用戶處理所導致的問題。

例如,創建一個名爲-l文件,以及至少一個其他的文件,然後運行ls *

[email protected]:~$ mkdir temp 
[email protected]:~$ cd temp 
[email protected]:~/temp$ touch ./-l 
[email protected]:~/temp$ touch testfile 
[email protected]:~/temp$ ls * 
-rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile 
[email protected]:~/temp$ 

ls *擴大到ls -l testfile

大多數Unix工具可以採取的參數 - 和每次吵架--後,將被視爲一個文件名:

[email protected]:~/temp$ ls -l -- testfile 
-rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile 
[email protected]:~/temp$ ls -- -l testfile 
-l testfile 
[email protected]:~/temp$ 

他們還可以指定路徑不以-開始,這樣的通過使用冗餘./

[email protected]:~/temp$ ls ./* 
./-l ./testfile 
[email protected]:~/temp$ 
+0

那,真是有趣的現象,謝謝你解釋這:) – bhope

相關問題