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?

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}

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}

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}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.