Đặt đầu ra jq thành Biến Bash


17

Tôi đang sử dụng curl để lấy lại JSON từ một api còn lại như thế này:

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

mà tạo ra giá trị tôi cần. Tuy nhiên; Khi tôi thay đổi mã ở trên để trông như thế này:

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

Sản xuất không có gì. Làm thế nào tôi có thể thay đổi điều này để biến tên người dùng được gán đầu ra?

Câu trả lời:


14

Đã thay đổi mã này và nó hoạt động:

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
Tôi nhận được Syntax error: redirection unexpected(có hoặc không có echocâu trả lời khác cho thấy.
Matt B

1
@MattB, bạn đang cố gắng sử dụng <<<toán tử trong lớp vỏ dựa trên tro mà không hỗ trợ nó. Trong mọi trường hợp, ngay cả trong zsh hoặc bash hỗ trợ toán tử đó, mã đó không có ý nghĩa gì. Nó chuyển hướng stdin echomà không đọc nó. Đó là một thắc mắc làm thế nào câu trả lời đó quản lý để có được 10 upvote.
Stéphane Chazelas

4

Điều này chỉ hoạt động nếu bạn mất "tiếng vang" trên dòng thứ hai.

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

Bạn có thể chuyển đổi nó thành một lớp lót như:

username=$( curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc |  jq -r  '.data.value' ) 
echo ${username}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.