1

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

4

1 回答 1

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 -*
["-*"]
于 2012-09-05T21:29:19.073 回答