我疯了。我想在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 中我必须省略引号。
--grep='"foo"'
一样,即查找字符串"foo"
的文字本身,包括引号。 - huonecho --grep="foo"
会确认引号是由shell解释的。但是在rust中调用该命令时并不需要这些引号。 - wingedsubmariner