下面是一个程序示例,它带有一个可选参数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
答案 0 :(得分:5)
问题不在于换行字符是否被转义;问题是你首先没有换行符。
就shell而言,$ ./myProg -a '
> '
实际上是一个双字符串(反斜杠,n),以及传递给程序的内容。
如何在命令行上传递文字换行符取决于你的shell,但请尝试以下操作:
>
($ ./myProg -a $'\n'
中有一个辅助shell提示符。您输入的内容是&#39; 返回 &#39; 。)
或者在bash中:
else if