如何在Rust中的Command参数中使用引号

时间:2014-08-27 23:52:36

标签: rust

我疯了。我想在rust git log --grep="foo"中生成这个命令。这可以在命令行中正常工作。

所以我继续这样试试。

Command::new("git")
         .arg("log")
         .arg("--grep=\"foo\"")
         .spawn() 

这不起作用。

如果我把它改成这个,我可以让它工作:

Command::new("git")
         .arg("log")
         .arg("--grep=foo")
         .spawn()

但这只能起作用,因为在这个简单的情况下可以省略引号,因此它将运行git log --grep=foo,这不是我想要的。我使用format!等尝试了很多不同的版本。我正在拔头发。

我试图用dtruss跟踪它,以弄清楚Rust实际上最终会使用什么,但我也没有运气。 :/

更新

好的,我解决了这个问题。这对我来说有点棘手(至少对我而言)。

我想要运行的命令是git log --grep="foo|bar" -E。这需要在命令行上执行引号。但同样重要的是要注意它需要与-E参数结合使用。

在Rust中我需要删除引号。

Command::new("git")
    .arg("log")
    .arg("-E")
    .arg("--grep=foo|bar")
    .spawn()

我仍然想知道为什么我必须省略Rust中的引号。

1 个答案:

答案 0 :(得分:2)

  

我仍然想知道为什么我必须省略Rust中的引号。

因为你没有shell来解释它们。

当您从shell启动命令时,您需要它们,因为git log --grep=foo|bar -E将被解释为管道git log --grep=foobar -E

然而,在shell解释了命令之后,git接收的参数实际上是log--grep=foo|bar-E

从Rust调用命令时,shell没有对命令的解释,因此您不需要引号。将引用与从shell

运行此命令相同
git log --grep='"foo|bar"' -E