🐡

shell script ファイル内でjsonを定義する

2024/02/03に公開

概要

シェルスクリプト内でJSONを定義したい場面に遭遇しました。

先人方の知恵を参考に、他のやり方を考えてみましたあ。

結論

ヒアストリングを使用する。

val="fuga"

sample=$(
  cat <<< "
    {
      'name': '$val'
    }
  " | tr "'" "\""
) 

echo $sample # { "hoge": "fuga" }

仕組み

ヒアストリングにて、JSONを組み立てている。

その際、プロパティ名などはシングルクォートで一旦囲み、 後ほど tr コマンドにてまとめてダブルクォートに置き換えている。

注意点

tr コマンドを忘れると、 プロパティ名や文字列箇所が シングルクォートのままとなる。
そのままJSONを期待するプログラムに渡すと、エラーの原因となる。

val="fuga"

sample=$(
  cat <<< "
    {
      'hoge': '$val'
    }
  "
)

echo $sample | jq -r "." # parse error: Invalid numeric literal at ...

その他

他にも良い方法があるかもしれない。

参考文献

Discussion