golang如何正确使用双引号?

时间:2016-07-01 13:18:04

标签: go

在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 abcedf你好"
    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 abcedf你好 => abc??edf����

你可以看到它们(cmd1除外)都不对。 utf-8也没有正常显示。我不希望输出中的反斜杠(我认为问题实际上是在输入中没有输出,见下文)

我不能简单地对结果做一些事情(即从结果中删除反斜杠),因为它不适用于复杂情况。例如,我想运行

cmd /c start "echo abc & echo def"

我无法删除双引号,否则后一部分将在当前窗口中运行,而不是在启动窗口中运行。然后在go中,下面的代码不起作用:

cmd6 := "cmd /c start \"echo abc & echo def\""
fo(cmd6)

如何让它在golang中运行?

1 个答案:

答案 0 :(得分:1)

直接使用echo怎么样?

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd1 := "abc def"
    cmd2 := "abc\"edf"
    cmd3 := `abc"edf`
    cmd4 := `abc\"edf`
    cmd5 := "abcedf你好"
    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))
}