Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

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コマンドについては、もう少し勉強が必要そうです。

以上

reflet
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした