Встановлення виходу jq на змінну Bash


18

Я використовую curl, щоб повернути JSON із спокою api таким чином:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc)
echo "${content}"| jq -r '.data.value'

що виробляє потрібне мені значення. Однак; коли я змінюю наведений вище код, щоб виглядати так:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc)
username=$(echo "${content}"| jq -r '.data.value')
echo $username

Нічого не виробляє. Як я можу змінити це, щоб змінна ім'я користувача присвоїла вихід?

Відповіді:


14

Змінили код на це, і він спрацював:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc) 
username=$( echo jq -r  '.data.value' <<< "${content}" ) 
echo ${username}

1
Я отримую Syntax error: redirection unexpected(з або без того, echoяк підказує інша відповідь.
Мт. Б,

2
@MattB, ти намагаєшся використовувати <<<оператора в оболонці на основі золи, яка не підтримує його. У будь-якому випадку, навіть у zsh або bash, які підтримують цього оператора, цей код не має сенсу. Він переспрямовує stdin, echoякий не читає. Дивно, як за цю відповідь вдалося отримати 10 оновлень.
Стефан Шазелас

4

Це працює лише в тому випадку, якщо ви втратите "відлуння" на другому рядку.

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc) 
username=$( echo jq -r  '.data.value' <<< "${content}" ) 
echo ${username}

0

Ви можете перетворити його в один вкладиш як:

username=$( curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc |  jq -r  '.data.value' ) 
echo ${username}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.