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
word
siguiente:-
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