Wie ist es möglich, eine Zeichenkette genau so wiederzugeben, wie sie in einer While-Read-Schleife ist?Bash: exakte Wiedergabe von maskierten Anführungszeichen in einer JSON-Datei
Hier ist das spezifische Beispiel.
Ich lese eine JSON-Datei: {"key":"value with a \"quote\" inside"}
und diese Rohrleitung in eine while-Leseschleife:
echo "{\"key\":\"value with a \\\"quote\\\" inside\"}" | jq -rc '.' | while read line; do echo "$line"; done
Dies ist die Ausgabe Ich sehe:
{"key":"value with a "quote" inside"}
Die Zitate in dem Feld verschwinden nach dem Echo. Ich möchte diese Escape-Zeichen beibehalten, also habe ich nach möglichen Lösungen gesucht und ich vermute, dass printf
helfen kann (Escape FileNames Using The Same Way Bash Do It). Durch die Änderung echo
-printf '%q'
:
echo "{\"key\":\"value with a \\\"quote\\\" inside\"}" | jq -rc '.' | while read line; do printf '%q' "$line"; done
ich folgendes:
\{\"key\":\"value\ with\ a\ \"quote\"\ inside\"\}
Leider jetzt die bisher unescaped Anführungszeichen entkam auch (zusätzlich zu allen anderen entweicht). Können Sie mir sagen, wie ich die folgende Ausgabe innerhalb einer while read
Schleife erreichen kann?
{"key":"value with a \"quote\" inside"}
Verwendung 'lesen -r' nicht Schrägstriche – jandob
@jandob zu interpretieren: Thank you! Könnten Sie das als eine Antwort verwenden, die ich akzeptieren werde? Es klappt! :) – econ