bash: jq curl must be escaped

Напоминание как обходить стороной ошибку Invalid string: control characters from при передаче значений из curl в jq


parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 21, column 26

постановка вопроса

В чём сыр бор, в некоторых случаях можно при вызове curl на выходе получить json, который затем передать для парсинга в jq. И это отлично работает если использовать пайплайн, но в некоторых случаях перестаёт работать если сначала передать выход в переменную, как на примере:

решение

проблема в спецсимволах, конкретно по ошибке «U+0000» в символе новой строки «/n». Всё бы хорошо если бы мы сами генерировали эту строку, можно было экранировать как jq и просит, но она ж из запроса приходит.

почему-то яндекс в упор не хочет находить решение по ссылке https://github.com/jqlang/jq/issues/1049 упорно предлагая стаковерфлоу с непонятными конструкциями.

итак для posix.sh используем вместо echo printf:

для bash используем echo -E: