我正在使用Pflag库中的StringSliceP接受字符串列表作为CLI参数。
我从Windows命令提示符调用Go应用程序。
我希望列表中的一些字符串包含一个("
(双引号字符,但我无法做到这一点。
逃避报价不起作用:
goapp.exe --string-slice-list "a"b",c,d,e
预期结果:[]string{"a"b", "c", "d", "e"}
实际结果:Error: invalid argument "a"\b,c,d,e" for "--string-slice-list" flag: parse error on line 1, column 1: bare " in non-quoted-field
加倍报价是行不通的:
goapp.exe --string-slice-list "a""b",c,d,e
预期结果:[]string{"a"b", "c", "d", "e"}
实际结果:Error: invalid argument "a"b,c,d,e" for "--string-slice-list" flag: parse error on line 1, column 1: bare " in non-quoted-field
以下是如何在Windows命令提示符下执行此操作:
goapp.exe --string-slice-list "a""b",c,d,e
产生[a"b c d e]
和
goapp.exe --string-slice-list "a\""b",c,d,e
做[a"b c d e]
(我不确定你到底想要哪一个(。
正如已经指出的,这是因为Pflag库使用了Go标准库编码.csv,支持RFC 4180中描述的格式。如果我们参考第5、6和7段中的第2节:
如果字段没有用双引号括起来,则字段中不能出现双引号。
包含换行符(CRLF(、双引号和逗号的字段应该用双引号括起来。
如果使用双引号将字段括起来,则使用双引号必须通过在字段前面加另一个双引号。