Je n'arrive pas à faire {}
écho un JSON vide si un envvar est manquant. J'ai soit une fuite }
dans la sortie si elle est définie, soit l'échappement s'affiche.
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
Comment puis-je y échapper correctement?
echo "${X:-{\}}"
a très bien fonctionné.Réponses:
Citez vos bretelles:
Inner doubles guillemets sont nécessaires ici, qui a l' air drôle , mais est syntaxiquement bien.
Les guillemets simples ne fonctionneront pas, et je ne sais pas pourquoi. Il s'agit de véritables citations imbriquées, pas de fin et de reprise, que vous pouvez vérifier en insérant des espaces. Double fonctionnera bien cependant.
la source
word
suit:-
doit être spécifiquement entre guillemets, il"${X:-'{}'}"
est donc littéralement${X:-'{}
suivi de'}
. La raison pour laquelle la spécification est si spécifique n'est pas claire pour moi.Vous pouvez tricher et définir une variable comme résultat vide et éviter les problèmes de citation
la source
Ce que je fais souvent, c'est utiliser des valeurs hexadécimales pour les caractères via
printf
:Légèrement verbeux, mais fonctionne sans trop insister sur les citations.
la source