jq出力をBash変数に設定する


17

curlを使用して、次のようにRESTの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 unexpectedecho他の答えが示唆するように、の有無にかかわらず)得る
Matt B

1
@MattB、あなたは<<<それをサポートしていない灰ベースのシェルで演算子を使用しようとしています。いずれの場合でも、その演算子をサポートするzshまたはbashであっても、そのコードは意味がありません。それはそれをecho読まない標準入力をリダイレクトします。その回答がどうして10票を獲得できたのかは不思議です。
ステファンChazelas

4

これは、2行目の「エコー」を失った場合にのみ機能します。

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

次のように1つのライナーに変換できます。

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.