2

我正在使用 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

4

1 回答 1

1

以下是从 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 库使用了支持RFC 4180中描述的格式的 Go 标准库encoding/csv。如果我们参考第 5、6 和 7 段中的第 2 节:

如果字段没有用双引号括起来,则双引号可能不会出现在字段内。

包含换行符 (CRLF)、双引号和逗号的字段应该用双引号括起来。

如果使用双引号将字段括起来,则出现在字段内的双引号必须通过在其前面加上另一个双引号来进行转义。

于 2021-10-21T09:22:06.250 回答