我對這個主題,逗號與空格相比,在分隔參數方面有一些問題。cmd-逗號分隔參數相比空間?
他們是熟悉的命令提示符C程序員,也許能扔一些輕的問題..
我知道這樣
c:\>program a b c
時,有4個參數[0]=program
[1]=a
[2]=b
[3]=c
根據hh ntcmds.chm
概念..
殼牌概述
; and , are used to separate parameters
; or , command1 parameter1;parameter2 Use to separate command parameters.
我看到dir a,b
給出相同的結果dir a b
但
c:\>program a,b,c
給出參數[0] =節目[1] = A,B,C
那麼做一些?或所有? Windows命令使用;和?這是在每個命令的代碼中進行的解釋,還是由shell像空間一樣完成的?
如果它是在每個命令的代碼..我怎麼知道它是哪一個呢? 我注意到explorer.exe的文檔提到了逗號,例如。你可以做 explorer /e,.
但是DIR /?沒有提到它,但可以使用它。而一個典型的c程序並不需要,作爲一個分隔符..所以是這種情況,殼不使用逗號分隔,它使用空間。和windows命令一樣,這樣做'因爲它們是(全部?)寫入來限定shell使用逗號時進一步提供的參數嗎?
如何判斷shell執行了什麼操作,以及MS C運行時或標準庫執行了什麼操作?我有一個Windows C PROG只是#include在頂部,以及顯示argv的代碼。使用gcc編譯。我看不到一種方法,我可以看到哪些「參數化!」是從shell完成的,而且是從標準庫自動執行的。另外,我注意到逗號不適用於外部程序xcopy或telnet。我想我已經看到了rundll32。我想這只是一些。可能不是一個公共可用庫中的函數!也許只是特殊的ext程序,它會執行cmd.exe的內部命令。 –
barlop
2010-11-11 16:40:45
除了shell功能,一切都是由MS C運行時完成的。 Shell功能包括重定向('<', '>'等''''),管道('|'),流量控制('&&'和'||')和轉義('^')等。 就像我說的,我從來沒有見過在命令行上使用'''的程序,所以我並不驚訝複製和telnet不支持它。 – 2010-11-11 17:35:13
你是否建議ms c runtime確實分隔空格和引號?還是仍然是殼?如果它是ms c運行時,你能證明它嗎?我沒有看到你的第二個要點是如何區分unix,而windows的cos不是unix shell也是解析重定向和管道。 – barlop 2010-11-11 18:00:15