質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

2回答

1780閲覧

bash ヒアドキュメントでファイルをインプットにする

noz_awsinf_sp

総合スコア62

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2020/07/15 13:09

https://qiita.com/unhurried/items/c62d29540de3e10a50ad
上記のサイトを参考に、事前にJSON内に変数を用意しておき、
シェル内で変数を置換してJSONを出力する処理を考えてます。

サイトではヒアドキュメントに直接入力しているのですが
以下のように事前に別ファイルでJSONを用意しておき
それをヒアドキュメント内のインプットにして変数を展開することは可能でしょうか?

↓サイトだとEOS内でJSONを記述している

number=1 string="abc" # JSON作成にはヒアドキュメントを使う json=$(cat << EOS { "number": ${number}, "string": "${string}" } EOS )

↓事前に用意した「test.json」をインプットにしたい(これだと動作しませんでした。。。)

number=1 string="abc" # JSON作成にはヒアドキュメントを使う json=$(cat << EOS | jq . test.json EOS ) echo "$json" ---- cat test.json { "number": ${number}, "string": "${string}" }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

eval使っていいなら、これでいける。

Bash

1number=1 2string="abc" 3 4# json=$(eval echo $(sed -e 's/\"/\\"/g' test.json)) # 1行になる別解 5json=$(eval echo "\"$(sed -e 's/\"/\\"/g' test.json)\"") # コメントによる解 6# json=$(eval "cat <<< \"$(sed -e 's/\"/\\"/g' test.json)\"") # もうひとつの別解 7 8echo "$json"
$ bash jsontest.sh { "number": 1, "string": "abc" }

投稿2020/07/15 14:24

編集2020/07/15 14:54
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/07/15 14:41 編集

ああ、" をクォートしておけば良かったんですね。eval前に書き換えるのは思いつかなかったです。 json=$(eval echo "\"$(sed -e 's/\"/\\"/g' test.json)\"") でいいかと思います。
Daregada

2020/07/15 14:51

あー、echoに"~"が渡されるように調整すればよかったのか。ありがとうございます。
guest

0

案1:
sedで1つずつ置換する。

Bash

1json=$( sed -e s/'${number}'/"${number}"/g -e s/'${string}'/"${string}"/g test.json)

案2:
一時ファイルに書いてsourceする。

Bash

1(echo 'json=$(cat << EOS'; cat test.json ; echo EOS ; echo ')' ) > /tmp/temp$$ 2source /tmp/temp$$ 3rm /tmp/temp$$

くらいしか、思いつかないですねぇ。

投稿2020/07/15 14:19

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問