Mengatur output jq ke Variabel Bash

17

Saya menggunakan curl untuk mendapatkan JSON kembali dari api sisa seperti ini:

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

yang menghasilkan nilai yang saya butuhkan. Namun; ketika saya mengubah kode di atas terlihat seperti ini:

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

Tidak menghasilkan apa-apa. Bagaimana saya bisa mengubah ini sehingga variabel nama pengguna mendapat hasil?

jymbo
sumber

Jawaban:

14

Mengubah kode ini dan berhasil:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc) 
username=$( echo jq -r  '.data.value' <<< "${content}" ) 
echo ${username}
jymbo
sumber
1
Saya mendapatkan Syntax error: redirection unexpected(dengan atau tanpa echojawaban yang disarankan.
Matt B
1
@ Mb, Anda mencoba menggunakan <<<operator di shell berbasis abu yang tidak mendukungnya. Bagaimanapun, bahkan dalam zsh atau bash yang mendukung operator itu, kode itu tidak masuk akal. Ini mengarahkan kembali stdin echoyang tidak membacanya. Sungguh menakjubkan bagaimana jawaban itu berhasil mendapatkan 10 upvotes.
Stéphane Chazelas
4

Ini hanya berfungsi jika Anda kehilangan "gema" di baris kedua.

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

Anda dapat mengonversinya menjadi satu liner sebagai:

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