Haskell命令行参数处理库

8

我一直使用cmdargs进行参数处理,它非常好用。但是,我没有看到单个连字符的长选项名称功能,例如-option1 -option2或更难的-optx,它等同于--opt=x。我需要与现有应用程序保持兼容性,因此这两种格式都是必需的。

System.Console.Getopt似乎也不支持这一点。有人能够提供如何使用cmdargs进行处理的示例,或者建议一个支持此功能的替代库吗?


3
GNU公约规定长选项要使用两个破折号。我认为,像getopt这样的库被设计出来是为了始终强制执行这个约定。如果我是你,我会尝试直接使用getArgs并编写自己的非标准选项处理函数(类似于ImageMagick或其他方式)。 - sastanin
@jetxee - 我可以这样做,但是我必须编写自己的帮助信息。至少解析getArgs相对简单。奇怪的是,我需要与gnu可执行文件兼容。 - John L
1个回答

9

可能最简单的方法是自己进行快速预处理。例如,如果您需要支持精确的三个选项 -option1-option2-optx,那么可以尝试以下内容:

munge "-option1" = "--option1"
munge "-option2" = "--option2"
munge s | "-opt" `isPrefixOf` s = "--opt=" ++ drop 4 s
munge s = s

main = do
    realArgs <- getArgs
    withArgs (map munge realArgs) mainThatUsesCmdArgs

正如你所说,帮助信息将不再提及具有这些简短形式的可能性。(也许这是一件好事。)

如果你想要更多,你可能需要说服某人修改cmdargs。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接