Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@reflet

jsonファイルを環境変数に展開する

概要

jsonファイルに記載した内容を環境変数にも展開したい場合があったので調べた内容をメモする

ファイル構成

ファイル構成
├ config.json
└ json.sh

JSONファイル作成

下記の内容で作ってみる。

config.json
{
  "hoge": "hello_world",
  "fuga": "example_value"
}

シェルを作成する

下記の内容で作ってみました。

json.sh
#!/bin/bash

JSON=`cat config.json`

KEYS=$(echo $JSON | jq -r 'keys[] as $k | "\($k)=\(.[$k])"')
i=0
for e in ${KEYS[@]}; do
    # キーと値を分割する
    arr=(`echo "${e}" | tr -s '=' ' '`)
    # キーを大文字に変換して変数定義する 
    export ${arr[0]^^}="${arr[1]}"
    let i++
done

echo "HOGE: ${HOGE}"
echo "FUGA: ${FUGA}"

テスト

実行してみる

ターミナル
$ ./json.sh
HOGE: hello
FUGA: example

このままだと

ターミナル
$ echo ${HOGE}

$ echo ${FUGA}

となり、シェルの中だけ有効となる。

環境変数として定義する

sourceコマンドを使う。

ターミナル
$ source json.sh
HOGE: hello_world
FUGA: example_value

動作確認してみる。

ターミナル
$ echo $HOGE
hello_world

$ echo $FUGA
example_value

まとめ

jsonファイルに定義する値に半角スペースがあるとそこで切れてしまうなどの問題もあり、
あまりいいやり方ではない感じです。

jqコマンドについては、もう少し勉強が必要そうです。

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?