在 Windows cmd 控制台中,当我使用 echo 命令时:
echo abc //get: abc
echo "abc //get: "abc
echo "abc" //get: "abc"
然后我想用exec包用go语言运行
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd1 := "echo abc def"
cmd2 := "echo abc\"edf"
cmd3 := `echo abc"edf`
cmd4 := `echo abc\"edf`
cmd5 := "echo abc😊edf你好"
fo(cmd1)
fo(cmd2)
fo(cmd3)
fo(cmd4)
fo(cmd5)
}
func fo(command string) {
cmd := exec.Command("cmd", "/C", command)
out, _ := cmd.Output()
fmt.Printf("%s => %s\n", command, string(out))
}
我明白了
echo abc def => abc def
echo abc"edf => abc\"edf
echo abc"edf => abc\"edf
echo abc\"edf => abc\\\"edf
echo abc😊edf你好 => abc??edf����
如您所见,它们(cmd1 除外)都不正确。 utf-8 也没有正确显示。我不希望输出中出现反斜杠(我认为问题实际上是输入而不是输出,见下文)
我不能简单地对结果做一些事情(即从结果中删除反斜杠),因为它不适用于复杂的情况。比如我要运行
cmd /c start "echo abc & echo def"
我不能去掉双引号,否则后面的部分会在当前窗口运行,而不是在开始窗口运行。然后在 go 中,下面的代码不起作用:
cmd6 := "cmd /c start \"echo abc & echo def\""
fo(cmd6)
如何让它在golang中运行?
最佳答案
直接用echo怎么样?
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd1 := "abc def"
cmd2 := "abc\"edf"
cmd3 := `abc"edf`
cmd4 := `abc\"edf`
cmd5 := "abc😊edf你好"
cmd6 := "abc & echo def"
fo(cmd1)
fo(cmd2)
fo(cmd3)
fo(cmd4)
fo(cmd5)
fo(cmd6)
}
func fo(command string) {
cmd := exec.Command("echo", command)
out, _ := cmd.Output()
fmt.Printf("%s => %s\n", command, string(out))
}
关于golang 如何正确使用双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147961/