Похоже, я не могу получить пустой JSON, {}
если отсутствует envvar. У меня либо есть трейлинг }
на выходе, если он установлен, либо экранирование.
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
Как мне избежать этого правильно?
echo "${X:-{\}}"
работал просто отлично.Ответы:
Цитируйте свои фигурные скобки:
Здесь нужны внутренние двойные кавычки, что выглядит забавно, но синтаксически прекрасно.
Одиночные кавычки не будут работать, и я не совсем уверен, почему нет. Это реальное вложенное цитирование, а не конец-и-возобновление, которое вы можете проверить, вставив пробелы. Хотя Double будет работать нормально.
источник
word
следующее:-
должно быть специально заключено в двойные кавычки, поэтому"${X:-'{}'}"
буквально${X:-'{}
следует'}
. Почему спецификация такая конкретная, мне неясно.Вы можете обмануть и установить переменную равной пустому результату, и избежать проблем с цитированием
источник
Я часто использую шестнадцатеричные значения для символов через
printf
:Немного многословно, но работает без особого акцента на кавычки.
источник