什么是有效字符以及如何在 clap.rs 参数中转义?

What are valid characters and how to escape in clap.rs arguments?

我想将某种形状或形式 dictionary/map/object 传递到我的拍手应用程序中。我可以预处理 dict 以将其转换为一些 csv 或其他内容。我的问题是我无法在 clap 文档中找到哪些字符对参数值有效以及如何转义它们。这与拍手无关,而是 shell 具体吗?

我可以传递类似

的东西吗

myApp --dicty="a=1,b=3,qwe=yxc"

?

Is this unrelated to clap and instead shell specific?

大多数情况下,是的。 clap 将获取 shell 确定的任何参数并将对其进行解析。

但是 clap 内置了对值集的支持,来自自述文件:

  • Supports multiple values (i.e. -o <val1> -o <val2> or -o <val1> <val2>)
  • Supports delimited values (i.e. -o=val1,val2,val3, can also change the delimiter)

如果这还不够,那么您必须将 dicty 定义为 String,您将收到字符串 a=1,b=3,qwe=yxc(我认为您不会收到引号)然后你必须自己解析它,要么手动(regex/split/...),要么用更高级的东西(例如 csv 箱子,尽管这可能有点过头了)。

虽然这看起来有点奇怪。

FWIW structopt(它建立在 clap 的基础上以提供更具声明性的 UI,并且应该是 Clap 3 的一部分)并不完全支持这类事情,但可以相对容易地强制使用它: https://github.com/TeXitoi/structopt/blob/master/examples/keyvalue.rs

经过一些修改将允许类似

myApp -D a=1 -D b=3 -D que=yxc

或(尽管请参阅链接片段中的评论以了解限制)

myApp -D a=1 b=3 que=yxc

作为 vec![("a", "1"), ("b", "3"), ("que", "yxc")] 收集,从中创建散列图很简单。