将 jq 输出设置为 Bash 变量

jym*_*mbo 30 bash curl json jq

我正在使用 curl 从这样的休息 api 中获取 JSON:

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

这产生了我需要的价值。然而; 当我将上面的代码更改为如下所示时:

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

不产生任何东西。如何更改此设置以便为用户名变量分配输出?

jym*_*mbo 23

将代码更改为此,它起作用了:

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

  • 没有迹象表明_为什么_用户的代码不起作用。您的代码在功能上是相同的,至少乍一看是这样。那么,使它起作用的区别是什么? (2认同)

小智 7

您可以将其转换为单行:

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


小智 5

这仅在您丢失第二行的“回声”时才有效。

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

  • 这只是[早期答案](https://unix.stackexchange.com/a/354951/116858)的重复。我编辑了其他答案,使其正确。这个答案仍然包含错误(命令替换中的“echo”,并且最后一行没有引用“$username”)。 (2认同)