使用optparse-applicative从命令行参数中读取换行符

时间:2017-03-03 14:09:52

标签: shell haskell

下面是一个程序示例,它带有一个可选参数a,其默认值为换行符。该程序仅打印唯一参数的值。因此,在没有参数或使用-a '\n'的情况下调用程序应该给出相同的值,但它没有:

$ ./myProg


$ ./myProg -a '\n'
\n

问题在于,当从命令行参数中读取时,换行符会被转义。是否可以使两个调用的行为相同?

import Options.Applicative

data Options = Options String

optsParser :: Parser Options
optsParser = Options
    <$> strOption
         ( short 'a'
        <> metavar "A"
        <> value "\n" )

opts :: IO Options
opts = execParser $ info (helper <*> optsParser) ( fullDesc )

main = do
    Options a <- opts
    putStrLn $ a

1 个答案:

答案 0 :(得分:5)

问题不在于换行字符是否被转义;问题是你首先没有换行符。

就shell而言,$ ./myProg -a ' > ' 实际上是一个双字符串(反斜杠,n),以及传递给程序的内容。

如何在命令行上传递文字换行符取决于你的shell,但请尝试以下操作:

>

$ ./myProg -a $'\n' 中有一个辅助shell提示符。您输入的内容是&#39; 返回 &#39; 。)

或者在bash中:

else if