In Windows cmd Konsole, wenn ich den Echo-Befehl verwenden:golang Wie kann man doppelte Anführungszeichen richtig verwenden?
echo abc //get: abc
echo "abc //get: "abc
echo "abc" //get: "abc"
Dann ist es in go Sprache mit dem exec-Paket Ich mag laufen
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))
}
ich
echo abc def => abc def
echo abc"edf => abc\"edf
echo abc"edf => abc\"edf
echo abc\"edf => abc\\\"edf
echo abcedf你好 => abc??edf����
Wie Sie sehen können, ist keiner von ihnen (außer Cmd1) richtig. Auch utf-8 wird nicht korrekt angezeigt. Ich möchte nicht den Back-Slash in Ausgabe (ich glaube das Problem ist tatsächlich in der Eingabe nicht ausgegeben, siehe unten)
Ich kann nicht einfach etwas auf das Ergebnis (dh entfernen Schrägstrich von Ergebnis), weil es nicht funktioniert für komplexe Situationen. Zum Beispiel möchte ich
cmd /c start "echo abc & echo def"
ich nicht doppelte Anführungszeichen entfernen, sonst wird der letzte Teil läuft im aktuellen Fenster, nicht das Startfenster laufen. Dann in gehen, unter Codes funktioniert nicht:
cmd6 := "cmd /c start \"echo abc & echo def\""
fo(cmd6)
Wie man es in Golang arbeiten lassen?
Ich fürchte, das ist ein Fall des [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Welches Problem versuchen Sie zu lösen? Geht es darum, UTF-8-Strings auf der Konsole zu drucken oder ein Programm mit komplexen Befehlszeilenargumenten auszuführen? Ich frage, weil Sie ein künstliches Beispiel ohne klare (für mich) Ziele und eine strittige Frage präsentieren, also während ich etwas über Go und die Windows-Konsole weiß und andere Programme von Go aus laufe, habe ich keine Ahnung was * Problem * eigentlich ansprechen. Bitte sei klarer. – kostix
Danke. Es scheint so. Ich möchte cmd6 ausführen, aber mit Fehlern. Dann brach ich zusammen, um die einfachere cmd1 ~ cmd5 zu testen, und fand, dass cmd2 ~ cmd5 auch nicht funktionierte. Vergib mir, wenn sie nicht das gleiche Problem waren. Mein ultimatives Ziel ist es, jede Dos-Konsole fehlerfrei laufen zu lassen (die gleiche Eingabe führt zu der gleichen Ausgabe oder Aktion zwischen DOS und GO), die alle cmd1 ~ cmd6 benötigt, sollte genau wie DOS-Konsole laufen. – qing6010