我正试图将引号中的星号作为命令行参数传递到我的控制台应用程序中,当我使用System.Environment.getArgs获得它时,我实际上得到了当前目录中的文件列表。这是错误的,因为我把星号包装成引号,所以引号中的文本不应该被替换。在cygwin下,如何在windows中获取没有这种替换的命令行参数?

最佳答案

如果用单引号括起来,'*'它不会被展开,但是两个倒逗号会进入getArgs的结果(见下文),所以以后需要删除它们。
在windows中展开"*"的原因是,由于空格的缘故,倒逗号作为globabble文件名的一部分是合法的。你可能想在某个时候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 -*
["-*"]

09-04 08:58