Linuxでjson文字列を変数として使用する方法

Linuxでjson文字列を変数として使用する方法

小さなスクリプトがあります。

ABC=100000
DFG=600000

JSON="[{"Address":"$ABC","Backup":false,"name":"$ABC:11011","port":6745,"targetId":"$DFG","weight":1}]"

echo $JSON

私が得た結果は次のとおりです。

[{Address:$ABC,Backup:false,name:$ABC:11011,port:6745,targetId:$DFG,weight:1}]

この場合、誰でも私を助けることができますか? TIA

ベストアンサー1

二重引用符で囲まれた文字列に二重引用符が含まれています。

保持したいすべての内部引用符をエスケープできます。

JSON="[{\"Address\":\"$ABC\",\"Backup\":false,\"name\":\"$ABC:11011\",\"port\":6745,\"targetId\":\"$DFG\",\"weight\":1}]"

一重引用符で囲まれた文字列を使用して、変数の位置を区別できます(読みにくい)。

JSON='[{"Address":"'"$ABC"'","Backup":false,"name":"'"$ABC"':11011","port":6745,"targetId":"'"$DFG"'","weight":1}]'

一重引用符で囲まれたフォーマット文字列でprintfを使用できます。

printf -v JSON '[{"Address":"%s","Backup":false,"name":"%s:11011","port":6745,"targetId":"%s","weight":1}]' "$ABC" "$ABC" "$DFG"

または、JSON処理ツールを使用して、変数値を持つすべての極端なケースを処理します。

JSON=$(
  jq -n -c --arg a "$ABC" --arg b "$DFG" '[{
    Address: $a, 
    Backup: false,
    name: ($a + ":11011"),
    port: 6745,
    targetId: $b,
    weight: 1
  }]'
)
echo "$JSON"

出力

[{"Address":"100000","Backup":false,"name":"100000:11011","port":6745,"targetId":"600000","weight":1}]

おすすめ記事