




Я до сих пор не понимаю, что означает $ '{}'. Однако мне удалось параметризовать myvalue.
"{\"some.*.something\":\"${myValueParamerterized}\"}"
Вы должны использовать jq для безопасного создания данных JSON. Прямая подстановка переменных опасна: что, если переменная содержит кавычки, обратную косую черту или другие специальные символы?
$'{\n"some.*.something": "myvalue"\n}' интерпретируется оболочкой до того, как передается в curl.
$'...' - это так называемые Строки ANSI C. Они существуют в языке оболочки рядом с строки в двойных кавычках"..." и строки в одинарных кавычках'...'.
Поскольку сами данные - которые кажутся json - содержат двойные кавычки, строки в двойных кавычках не могут использоваться для обертывания данных без экранирования двойных кавычек внутри самих данных. Это значит, что это должно выглядеть так:
"{\n\"some.*.something\": \"myvalue\"\n}"
В основном строки в одинарных кавычках могут использоваться, чтобы избежать выхода из ".
'{\n"some.*.something": "myvalue"\n}'
Но поскольку данные содержат escape-последовательность новой строки \n, а escape-последовательности не будут расширены в строки в одинарных кавычках, автор примера в вопросе использовал строки ANSI C $''.
Используя строки ANSI C, они получают и то, и другое: они могут избежать экранирования двойных кавычек в данных и по-прежнему расширять escape-последовательности новой строки.
После того, как оболочка расширила его, данные для curl выглядят так:
{
"some.*.something": "myvalue"
}
Далее читайте: https://www.gnu.org/software/bash/manual/html_node/Quoting.html
Обратите внимание, что в этом нет необходимости; что касается потребителя данных JSON,
'{"some.*.something": "myvalue"}'будет работать точно так же; новые строки представляют собой ненужное форматирование.