Прежде чем перейти к сути вопроса, обратите внимание, что
- приведенные образцы данных - это небольшая ошибка sh, поэтому я предполагаю, что вы имели в виду что-то вроде:
rsrecords='
{
"ResourceRecords": [
{
"Value": "heritage=external-dns,external-dns/owner=us-east-1:sandbox,external-dns/resource=service/api"
}
],
"Type": "TXT",
"Name": "\\052.apiconsumer.alpha.sandbox.test.net.",
"TTL": 300
}
'
Ваш jq-запрос не соответствует указанному выше JSON, поэтому я предполагаю, что вы хотели, чтобы запрос был простым:
.Name, .ResourceRecords[0].Value
В любом случае, с указанным выше JSON , команды bash:
jq -r '.Name, .ResourceRecords[0].Value' <<< "$rsrecords" |
while read -r name; read -r value; do
echo "$name"
done
дают:
\052.apiconsumer.alpha.sandbox.test.net.
Это правильно, потому что JSON строка "\\X"
является кодировкой необработанной строки: \X
Если вы хотите увидеть строку JSON, вызовите jq без параметра -r. Если вы хотите вызвать jq с параметром -r и хотите увидеть две обратные косые черты, вам придется закодировать их как четыре обратных косых черта в вашем JSON.