Напоминание как обходить стороной ошибку Invalid string: control characters from при передаче значений из curl в jq
постановка вопроса
В чём сыр бор, в некоторых случаях можно при вызове curl на выходе получить json, который затем передать для парсинга в jq. И это отлично работает если использовать пайплайн, но в некоторых случаях перестаёт работать если сначала передать выход в переменную, как на примере:
response="$( curl \ -s \ -H "X-Vault-Token: $1" \ -X POST \ -d "${payload}" \ "${vault_full_url}" )" certificate="$(echo "${response}" | jq -r '.data.certificate')"
решение
проблема в спецсимволах, конкретно по ошибке «U+0000» в символе новой строки «/n». Всё бы хорошо если бы мы сами генерировали эту строку, можно было экранировать как jq и просит, но она ж из запроса приходит.
почему-то яндекс в упор не хочет находить решение по ссылке https://github.com/jqlang/jq/issues/1049 упорно предлагая стаковерфлоу с непонятными конструкциями.
итак для posix.sh используем вместо echo printf:
printf "%s" '{ "name": ["hi\n", "there"] }' | jq .
для bash используем echo -E:
echo -E '{ "name": ["hi\n", "there"] }' | jq .