jq 출력을 Bash 변수로 설정


18

curl을 사용하여 다음과 같이 나머지 API에서 JSON을 다시 가져옵니다.

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

아무것도 생산하지 않습니다. 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다른 대답에서 알 수 있듯이의 유무에 관계없이)
Matt B

2
@MattB, 당신은 <<<그것을 지원하지 않는 애쉬 기반 쉘에서 연산자 를 사용하려고 합니다. 어쨌든 해당 연산자를 지원하는 zsh 또는 bash에서도 해당 코드는 의미가 없습니다. echo읽지 않은 stdin을 리디렉션합니다 . 이 답변이 어떻게 10 개의 공감대를 얻었는지 궁금합니다.
Stéphane Chazelas

4

두 번째 줄에서 "에코"를 잃어버린 경우에만 작동합니다.

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.