93962


以下のようなJSON文字列から複数の値を取得し、環境変数へ代入したいのですが、うまくいきませんでした。

$nameにJohn, $angeに30 が格納されるようにするには、どうすればよいでしょうか？

期待したとおりに動作しなかったShell

[code]

    json_string='{ "name": "John", "age": 30, "city": "New York" }'
    read name age <<< $( echo $json_string | jq -r '.name, .age' )
    echo $name
    echo $age
    
[/code]

実行結果

[code]

    $ json_string='{ "name": "John", "age": 30, "city": "New York" }'
    $ read name age <<< $( echo $json_string | jq -r '.name, .age' )
    $ echo $name
    John
    $ echo $age
    
    $
    
[/code]


CC BY-SA 4.0
2023-02-23T13:29:12.143
93961
2023-02-23T15:22:11.550
2023-02-23T15:22:11.550
3060
35267
question
json bash
Bash で JSON 文字列から複数の値を取得し、環境変数へ代入する方法


一例として、`xargs` を使うなど。

[code]

    $ read name age <<< $( echo "$json_string" | jq -r '.name, .age' | xargs )
    $ echo $name
    John
    $ echo $age
    30
    
[/code]

もしくは `jq` コマンド内で `join()` する方法もあります。

[code]

    $ read name age <<< $(echo "$json_string" | jq -r '[.name, .age] | join(" ")')
    $ echo $name
    John
    $ echo $age
    30
    
[/code]


CC BY-SA 4.0
2023-02-23T13:50:42.110
93962
2023-02-23T13:58:17.613
2023-02-23T13:58:17.613
47127
47127
93961
answer