文字列補間は bash で引用符を保持します。

文字列補間は bash で引用符を保持します。

ユーザー環境変数の一部の値を置き換えるjsonの本文をフォーマットする必要があります。 bashスクリプトでjson文字列を適切に置き換える方法をshoptまたは他の方法で見つけます。ただし、二重引用符を有効なjsonに保つか、再挿入してください。引用符と二重引用符の前処理を試みました。

例:

$ export env_var1=val1
$ export env_var2=val2
$ export args='{"key1": "${env_var1}", "key2": "${env_var2}"}'
$ echo $args #original input
$ eval echo $args #bad output- variables interpolated but quotes lost
Expected output= {"key1": "val1", "key2": "val2"}

編集:私の制限は、任意のjson文字列を事前に知らず、構造や名前を事前に知らないため、手動でフォーマットを再指定できないことです。私は解く必要はありません。これコンクリートケース - これはおもちゃの例です。私は、例で表されたランダムな文字列の一般的な解決策を定式化したいと思います。キー、値、またはその両方は環境変数です。 jsonは任意に入れ子にすることができ、非常に大きくすることができます。

ベストアンサー1

引用符をエスケープできます。

{\"key1\": \""$env_var1"\", "key2": \""$env_var2"\"}

jqを使用できます。

jq -n --arg one "$env_var1" --arg two "$env_var2" '{key1: $one, key2: $two}'

またはジョー:

jo key1="$env_var1" key2="$env_var2"

私はしばしば複雑なjsonオブジェクトを処理するためにheredocsを使用します。

read -rd '' json <<EOF
{
    key1: "$env_var1",
    key2: "$env_var2"
}
EOF
echo "$json"

おすすめ記事