754 Stimmen

YAML: Brauche ich Anführungszeichen für Zeichenfolgen in YAML?

Ich versuche, ein YAML-Wörterbuch für die Internationalisierung eines Rails-Projekts zu schreiben. Ich bin jedoch ein wenig verwirrt, da ich in einigen Dateien Zeichenfolgen in doppelten Anführungszeichen und in einigen ohne sehe. Ein paar Punkte zu beachten:

  • Beispiel 1 - alle Zeichenfolgen verwenden doppelte Anführungszeichen;
  • Beispiel 2 - keine Zeichenfolgen (außer den letzten beiden) verwenden Anführungszeichen;
  • das YAML-Kochbuch sagt: Das Einfassen von Zeichenfolgen in doppelte Anführungszeichen ermöglicht es Ihnen, Escapes zu verwenden, um ASCII- und Unicode-Zeichen darzustellen. Bedeutet das, dass ich doppelte Anführungszeichen nur verwenden muss, wenn ich bestimmte Zeichen escapen möchte? Wenn ja - warum verwenden sie in Beispiel 1 überall doppelte Anführungszeichen - nur aus Gründen der Einheitlichkeit / stilistischen Gründen?
  • die letzten beiden Zeilen von Beispiel 2 verwenden ! - das nicht spezifische Tag, während die letzten beiden Zeilen von Beispiel 1 dies nicht tun - und beide funktionieren.

Meine Frage lautet: Was sind die Regeln für den Einsatz der verschiedenen Arten von Anführungszeichen in YAML?

Könnte man sagen, dass:

  • im Allgemeinen keine Anführungszeichen benötigt werden;
  • verwenden Sie doppelte Anführungszeichen, wenn Sie Zeichen escapen möchten;
  • verwenden Sie ! mit einfachen Anführungszeichen, wenn... ?!?

0voto

Max Tkachenko Punkte 752

Wenn Sie versuchen, einen String in pytest tavern zu entkommen, könnte !raw hilfreich sein, um das Parsen von Strings in yaml zu vermeiden:

some: !raw "{test: 123}"

Überprüfen Sie weitere Informationen unter: https://tavern.readthedocs.io/de/latest/basics.html#type-conversions

0voto

andig Punkte 12692

Hier ist eine kleine Funktion (die nicht auf Leistungsoptimierung ausgelegt ist), die Ihre Zeichenfolgen bei Bedarf mit einfachen Anführungszeichen versehen und überprüft, ob das Ergebnis in den ursprünglichen Wert zurückgeführt werden kann: https://go.dev/play/p/AKBzDpVz9hk. Anstatt die Regeln zu überprüfen, verwendet sie einfach den Marshaller selbst und prüft, ob der marshalled und unmmarshalled Wert der Originalversion entspricht.

func yamlQuote(value string) string {
    input := fmt.Sprintf("key: %s", value)

    var res struct {
        Value string `yaml:"key"`
    }

    if err := yaml.Unmarshal([]byte(input), &res); err != nil || value != res.Value {
        quoted := strings.ReplaceAll(value, `'`, `''`)
        return fmt.Sprintf("'%s'", quoted)
    }

    return value
}

-1voto

seunggabi Punkte 1430
version: "3.9"

services:
  seunggabi:
    image: seunggabi:v1.0.0
    command:
      api:
        insecure: true
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

docker compoese up docker-compose.yaml

If you use docker compose v2, you don't need to use quotation for boolean.
Only the version needs quotations.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X