将jq输出设置为Bash变量


17

我正在使用curl从这样的rest api获取JSON:

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

什么都不产生。如何更改此设置,以便为用户名变量分配输出?

Answers:


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其他答案所建议的内容。)
Matt B

1
@MattB,您试图<<<在不支持它的基于灰烬的外壳中使用该运算符。无论如何,即使在支持该运算符的zsh或bash中,该代码也没有任何意义。它重定向echo不读取它的标准输入。奇怪的是,该答案如何获得10票赞成票。
斯特凡Chazelas

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}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.