在cygwin下的Windows上getArgs的行为不正确

时间:2012-09-05 15:45:54

标签: windows haskell command-line cygwin

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

1 个答案:

答案 0 :(得分:2)

如果用单引号将其括起来'*',它就不会展开,但是两个引号都会进入getArgs的结果(见下文),所以你需要以后删除它们。

在Windows中扩展"*"的原因是,由于空格,引号是可合法的,因为它是合法的文件名的一部分。您可能希望在某个时候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 -*
["-*"]