web-dev-qa-db-fra.com

Définition de la sortie jq sur une variable Bash

J'utilise curl pour récupérer JSON à partir d'une API de repos comme celle-ci:

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

ce qui produit la valeur dont j'ai besoin. Toutefois; quand je change le code ci-dessus pour ressembler à ceci:

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

Ne produit rien. Comment puis-je changer cela pour que la variable de nom d'utilisateur reçoive la sortie?

17
jymbo

Changé le code en cela et cela a fonctionné:

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

Cela ne fonctionne que si vous perdez "l'écho" sur la deuxième ligne.

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

Vous pouvez le convertir en un revêtement comme:

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