Ell*_*ron 4 console haskell arguments
我正在使用getArgs
我的Haskell程序来解析命令行中的参数.但是,当我调用我的程序时,我注意到我遇到了问题:
runhaskell Main *.hs .
Run Code Online (Sandbox Code Playgroud)
可以想象,Main
查看*.hs
目录中的.
文件.
但是有一个问题.下面的代码表现不像我期望的那样.
import System
main :: IO ()
main = do
args <- getArgs
print args
Run Code Online (Sandbox Code Playgroud)
我想看看
args = ["*.hs","."]
Run Code Online (Sandbox Code Playgroud)
但相反,我明白了
args = ["file1.hs","file2.hs","file3.hs","."]
Run Code Online (Sandbox Code Playgroud)
我的程序需要扩展glob表达式本身,因为它在多个目录中完成.但是我如何才能getArgs
返回原始的参数列表而不是试图变得神奇并且自己进行解析呢?
ram*_*ion 15
这不是haskell,这是你的shell.
通常,*.hs
在将命令传递给haskell之前,shell会解释文件globs(like ).
要看到这个尝试运行
runhaskell Main '*.hs' .
Run Code Online (Sandbox Code Playgroud)
单引号将阻止shell解释glob,并按原样传递参数runhaskell
.
getArgs不解析glob expressison - getArgs永远不会看到glob表达式.在程序启动之前,您的shell将解析和扩展glob表达式.
在程序中你无法做任何事情来防止这种情况 - 你唯一的选择是逃避shell中的glob(通过在*
例如之前添加反斜杠或用单引号包围参数).
归档时间: |
|
查看次数: |
335 次 |
最近记录: |