小さなスクリプトがあります。
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}]