Impostazione dell'output jq su una variabile Bash


17

Sto usando il ricciolo per riavere JSON da un api di riposo come questo:

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

che produce il valore di cui ho bisogno. Però; quando cambio il codice sopra per assomigliare a questo:

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

Non produce nulla. Come posso cambiarlo in modo che alla variabile username sia assegnato l'output?

Risposte:


14

Modificato il codice in questo e ha funzionato:

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
Ricevo Syntax error: redirection unexpected(con o senza il echosuggerimento dell'altra risposta.
Matt B

1
@MattB, stai cercando di utilizzare l' <<<operatore in una shell basata su ash che non lo supporta. In ogni caso, anche in zsh o bash che supportano quell'operatore, quel codice non ha alcun senso. Reindirizza lo stdin di echocui non lo legge. È sorprendente come quella risposta sia riuscita a ottenere 10 voti.
Stéphane Chazelas,

4

Funziona solo se perdi l'eco nella seconda riga.

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

Puoi convertirlo in una fodera come:

username=$( curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc |  jq -r  '.data.value' ) 
echo ${username}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.