🐡
shell script ファイル内でjsonを定義する
概要
シェルスクリプト内で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