Ich kann anscheinend keinen leeren JSON {}
zum Echo bringen, wenn eine Envvar fehlt. Ich habe entweder ein Trailing }
in der Ausgabe, wenn gesetzt, oder das Escape wird angezeigt.
bash-3.2$ unset X
bash-3.2$ echo "${X:-{}}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-{}}"
y}
bash-3.2$ echo "${X:-{\}}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-{\}}"
{\}
bash-3.2$ echo "${X:-'{}'}"
'{}'
bash-3.2$ X=z
bash-3.2$ echo "${X:-'{}'}"
z
Wie entkomme ich es richtig?
echo "${X:-{\}}"
funktioniert.Antworten:
Zitieren Sie Ihre Zahnspange:
Hier sind innere doppelte Anführungszeichen erforderlich, was lustig aussieht, aber syntaktisch in Ordnung ist.
Einfache Anführungszeichen funktionieren nicht und ich bin mir nicht ganz sicher, warum nicht. Dies ist ein echtes verschachteltes Zitat, kein Ende und kein Lebenslauf, das Sie überprüfen können, indem Sie Leerzeichen einfügen. Double funktioniert jedoch einwandfrei.
quelle
word
Folgende:-
speziell in doppelte Anführungszeichen gesetzt werden muss, also"${X:-'{}'}"
wörtlich${X:-'{}
gefolgt von'}
. Warum die Spezifikation so spezifisch ist, ist mir unklar.Sie können betrügen und eine Variable als leeres Ergebnis festlegen und die Anführungszeichenprobleme vermeiden
quelle
Was ich häufig mache, ist die Verwendung von Hex-Werten für Zeichen über
printf
:Etwas ausführlich, funktioniert aber ohne zu viel Stress bei Anführungszeichen.
quelle