Shell 使用optpass applicative从命令行参数读取换行符
下面是一个程序示例,它使用一个可选参数Shell 使用optpass applicative从命令行参数读取换行符,shell,haskell,Shell,Haskell,下面是一个程序示例,它使用一个可选参数a,该参数的默认值为换行符。程序只打印唯一参数的值。因此,不带参数或使用-a'\n'调用程序时应给出相同的值,但它不会: $ ./myProg $ ./myProg -a '\n' \n 问题是,当从命令行参数读取换行符时,换行符被转义。是否可以使两个调用的行为相同 import Options.Applicative data Options = Options String optsParser :: Parser Options optsPa
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
导入选项。应用程序
数据选项=选项字符串
optsParser::解析器选项
optsParser=选项
斯特罗普顿
(简称"a")
metavar“A”
值“\n”)
选项::IO选项
opts=execParser$info(helper optsParser)(fullDesc)
main=do
选项a问题不在于换行符被转义;问题是你一开始没有换行符
就shell而言,'\n'
实际上是一个两个字符的字符串(反斜杠,n),这就是传递给程序的内容
如何在命令行上传递文字换行符取决于shell,但请尝试以下操作:
$ ./myProg -a '
> '
(其中的
有一个辅助shell提示符。您键入的是“Return”。)
或者在bash中:
$ ./myProg -a $'\n'
问题不在于换行符被转义;问题是你一开始没有换行符
就shell而言,'\n'
实际上是一个两个字符的字符串(反斜杠,n),这就是传递给程序的内容
如何在命令行上传递文字换行符取决于shell,但请尝试以下操作:
$ ./myProg -a '
> '
(其中的
有一个辅助shell提示符。您键入的是“Return”。)
或者在bash中:
$ ./myProg -a $'\n'
很好的澄清。有没有什么简单的方法可以让optparse将作为命令行参数给出的“\n”解释为换行符?@GuillaumeChérel您必须自己完成并实现自己的转义语法。很好的说明。有没有简单的方法可以让optparse将作为命令行参数给出的“\n”解释为换行符?@GuillaumeChérel您必须自己完成并实现自己的转义语法。