我試圖將引號中的星號符號作爲命令行參數傳遞給我的控制檯應用程序,當我使用System.Environment.getArgs
時,我實際上獲取當前目錄中的文件列表。這是錯誤的,因爲我將星號包裹在引號中,所以引號中的文本不應該被替換。如何在cygwin下的Windows中獲得沒有這種替換的命令行參數?在cygwin下的Windows上的getArgs的錯誤行爲
回答
如果你將其括在單引號,'*'
它不會擴大,但兩個引號打通進入getArgs
結果(見下文),所以你需要在以後將其刪除。
"*"
在windows中被擴展的原因是由於空格,引入的逗號作爲globbable文件名的一部分是合法的。某些時候你可能想要del "temp file *.dat"
。
module ListArgs where
import System.Environment
main = getArgs >>= print
給出:
[1 of 1] Compiling ListArgs (ListArgs.hs, ListArgs.o)
Linking ListArgs.exe ...
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe *
["HereDoc.hs","IOutils.lhs","SugaredApplicative.hs","ListArgs.exe","ListArgs.hi","ListArgs.hs","ListArgs.o"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe "*"
["HereDoc.hs","IOutils.lhs","SugaredApplicative.hs","ListArgs.exe","ListArgs.hi","ListArgs.hs","ListArgs.o"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe '*'
["'*'"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe '*
["'*"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe -*
["-*"]
AndrewC,謝謝你的回答,單引號在cmd.exe中確實有效。然而,在cygwin下它不起作用,我仍然得到當前目錄中的文件列表。 - *無處不在。 –
使用前綴和單引號是一種解決方法,對於用戶來說顯然不是。開發人員也應該記住Windows中的這種行爲,並以某種方式從輸入中消除不需要的符號。我寧願有一個不做這種替換的函數。但似乎Haskell平臺不提供這樣的功能。很遺憾。 –
我幾年沒用過cygwin。我會添加一個標籤來擴大觀衆。 – AndrewC
- 1. 錯誤通過Cygwin的在Windows
- 2. cygwin上的glade錯誤
- 3. cygwin上ocaml的flexdll錯誤
- 4. 錯誤在Cygwin的
- 5. wxWidgets + Windows上的Cygwin
- 6. 在cygwin下的windows 7下安裝mahout
- 7. 使用Cygwin在Windows 7上安裝pocketsphinx 0.7時的錯誤
- 8. 在Windows 10上的Vagrant rsync(來自cygwin)有fork內存錯誤
- 9. Windows 7中的repo init錯誤與cygwin
- 10. 在cygwin上使用getopts的錯誤
- 11. EPERM錯誤做在Cygwin上的xterm
- 12. 錯誤與fork()在cygwin在Windows 7
- 13. 在Windows下的Gcovr錯誤
- 14. cygwin下的perl.exe重新映射錯誤
- 15. hadoop在Windows與cygwin noclassdefinition發現錯誤
- 16. 在Windows下定義Cygwin中的別名
- 17. 構建Windows上的memcached 1.4.x錯誤與cygwin
- 18. Windows上的Cygwin + Linux NDK
- 19. 錯誤在Cygwin
- 20. 在windows下設置Emacs + Cygwin!
- 21. 在Windows 7上的R和cygwin上安裝rstan時出錯
- 22. 在Windows 7上運行rails with cygwin
- 23. cygwin上的IPP鏈接器錯誤
- 24. 在Windows上的PyInstaller錯誤
- 25. Eclipse CDT的Cygwin的錯誤
- 26. Cygwin運行錯誤版本的java
- 27. Cygwin的命令行卷曲SSL錯誤
- 28. 在Windows XP上的Rails開發和Cygwin
- 29. 在Windows XP上使用Cygwin的PIG
- 30. 無法在Windows 7上的Cygwin下編譯boost 1.50.0 64位
這似乎更像是一個窗口的問題比Haskell的。 –
你使用單引號還是雙引號? –
這是您的shell的問題,而不是'getArgs'。在將任何參數發送到您的程序之前,執行Globbing。 – valderman