下面是一个程序的示例,该程序采用一个可选参数a,该参数具有换行符的默认值.该程序仅打印唯一参数的值.因此,调用没有参数或使用的程序-a '\n'应该给出相同的值,但它不会:
$ ./myProg
$ ./myProg -a '\n'
\n
Run Code Online (Sandbox Code Playgroud)
问题是当从命令行参数中读取时,换行符会被转义.是否可以使两个调用表现相同?
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
Run Code Online (Sandbox Code Playgroud)
问题不在于换行符被转义; 问题是你首先没有换行符.
就shell而言,'\n'字面上是一个双字符串(反斜杠,n),这就是传递给你的程序的东西.
如何在命令行上传递文字换行符取决于您的shell,但请尝试以下操作:
$ ./myProg -a '
> '
Run Code Online (Sandbox Code Playgroud)
(>里面有一个辅助shell提示符.你键入的是什么' Return '.)
或者在bash中:
$ ./myProg -a $'\n'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |