我試圖複製「ls」的命令下應該採取之間的任何0和2個參數,它們是文件路徑和一組標誌的衝突。當1個參數傳遞,我想傳遞一個文件並通過一組標誌來區分 - 我還以爲明顯的路要走,它是假設沒有文件名稱以「 - 」字符等,因此,如果參數的第一個字符是「 - 」,然後把它作爲一組標誌,否則把它當作一個文件路徑。使用「 - 」開始的文件,而不是與標誌
我應如何真正區分這兩個?
我試圖複製「ls」的命令下應該採取之間的任何0和2個參數,它們是文件路徑和一組標誌的衝突。當1個參數傳遞,我想傳遞一個文件並通過一組標誌來區分 - 我還以爲明顯的路要走,它是假設沒有文件名稱以「 - 」字符等,因此,如果參數的第一個字符是「 - 」,然後把它作爲一組標誌,否則把它當作一個文件路徑。使用「 - 」開始的文件,而不是與標誌
我應如何真正區分這兩個?
良好,LS的規則是 - 考慮-a
是一個文件:
ls -a
:-a
被認爲是一個選項參數;ls -- -a
:-a
被視爲一個文件參數的--
說法被認爲是一個分隔符,之後所有的參數都是文件,而不是選擇。
完美,謝謝:) – bhope
通常,程序不需要,並將其留給用戶處理所導致的問題。
例如,創建一個名爲-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$
那,真是有趣的現象,謝謝你解釋這:) – bhope
'--'用於結束開關並消除模糊性。否則'ls'只是假設開關。 –
不要寫自己的一切。使用'getopt'庫。 – Olaf