Parece que no puedo obtener un JSON vacío {}para hacer eco si falta un envvar. O tengo un seguimiento }en la salida si está configurado, o se muestra el escape.
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
¿Cómo escapo correctamente?

echo "${X:-{\}}"funcionó bien.Respuestas:
Cita tus frenillos:
Aquí se requieren comillas dobles internas , lo que parece divertido pero está sintácticamente bien.
Las comillas simples no funcionarán, y no estoy completamente seguro de por qué no. Esta es una cita real anidada, no end-and-resume, que puede verificar colocando espacios. Sin embargo, Double funcionará bien.
fuente
wordsiguiente:-debe estar específicamente entre comillas dobles, por"${X:-'{}'}"lo que literalmente va${X:-'{}seguido de'}. Por qué la especificación es tan específica no me queda claro.Puede hacer trampa y establecer una variable para que sea el resultado vacío, y evitar los problemas de citas
fuente
Lo que hago con frecuencia es utilizar valores hexadecimales para los caracteres a través de
printf:Ligeramente detallado, pero funciona sin demasiado estrés sobre las citas.
fuente