Установка вывода jq в переменную Bash


17

Я использую 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

Ничего не выдает. Как я могу изменить это так, чтобы переменной 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как предполагает другой ответ.
Мэтт B

1
@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.