Подумайте, как будут выглядеть ваши данные, если у вас просто будет файл:
$ cat tmp.json
{ "baz": "glern", "froboz": "foo again" }
В этом случае вы просто используете
$ curl ... -d "$(cat tmp.json)"
Теперь просто выполните подстановку команд, так сказать, «вручную» (переключаясь с двойных на одинарные кавычки, чтобы избежать экранирования кавычек в командной строке):
$ curl ... -d '{ "baz": "glern", "froboz": "foo again" }'
# with double quotes, it's
# curl ... -d "{ \"baz\": \"glern\", \"froboz\": \"foo again\" }"
# ... ew.
В общем, лучше позволить инструменту типа jq
генерировать для вас JSON, а не пытаться писать его вручную; это может значительно упростить цитирование, когда это необходимо.
$ curl ... -d "$(jq -n '{baz: "glern", froboz: "foo again"}')"
Практически обязательно использовать такой инструмент, если ваш JSON не жестко запрограммирован, а из таких переменных, как {"baz": "$SOME_VAR"}
. Вместо того, чтобы прыгать через обручи, чтобы убедиться, что все в SOME_VAR
правильно экранировано, пусть jq
сделает это за вас: jq -n --argjson x "$SOME_VAR" '{baz: $x}'
. Обратите внимание, что $x
является , а не переменной оболочки; это jq
переменная.