การตั้งค่าเอาต์พุต jq เป็น Bash Variable


18

ฉันใช้ curl เพื่อให้ JSON กลับมาจาก api ที่เหลือเช่นนี้

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

ซึ่งสร้างคุณค่าที่ฉันต้องการ อย่างไรก็ตาม; เมื่อฉันเปลี่ยนโค้ดด้านบนให้มีลักษณะดังนี้:

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

ไม่ได้ผลิตอะไรเลย ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไรเพื่อให้ตัวแปรชื่อผู้ใช้ได้รับการกำหนดผลลัพธ์

คำตอบ:


14

เปลี่ยนรหัสเป็นสิ่งนี้และทำงานได้:

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
ฉันได้รับSyntax error: redirection unexpected(โดยมีหรือไม่มีechoคำตอบอื่น ๆ ที่แนะนำ
แมตต์ B

2
@MattB คุณกำลังพยายามใช้<<<โอเปอเรเตอร์ในเชลล์ที่มีขี้เถ้าซึ่งไม่รองรับมัน ไม่ว่าในกรณีใดก็ตามแม้ใน zsh หรือ bash ซึ่งรองรับโอเปอเรเตอร์นั้นรหัสนั้นก็ไม่สมเหตุสมผล มันเปลี่ยนเส้นทาง stdin echoซึ่งไม่ได้อ่าน มันน่าแปลกใจที่คำตอบนั้นได้รับ 10 upvotes
Stéphane Chazelas

4

ใช้งานได้ก็ต่อเมื่อคุณสูญเสีย "echo" ในบรรทัดที่สอง

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

คุณสามารถแปลงเป็นหนึ่งซับใน:

username=$( curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc |  jq -r  '.data.value' ) 
echo ${username}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.