你可以使用这里-DOC:
foo=$(cat <<EOF
{"Comment":"Update DNSName.","Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"alex.","Type":"A","AliasTarget":{"HostedZoneId":"######","DNSName":"$bar","EvaluateTargetHealth":false}}}]}
EOF
)
通过在第一线未加引号离开EOF
,在这里,文档的内容将受到参数扩展,所以你$bar
扩展到任何你放在那里。
如果你可以在你的JSON换行符,你可以把它多一点可读性:
foo=$(cat <<EOF
{
"Comment": "Update DNSName.",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "alex.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "######",
"DNSName": "$bar",
"EvaluateTargetHealth": false
}
}
}
]
}
EOF
)
甚至(每行头缩进必须是一个选项卡)
foo=$(cat <<-EOF
{
"Comment": "Update DNSName.",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "alex.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "######",
"DNSName": "baz",
"EvaluateTargetHealth": false
}
}
}
]
}
EOF
)
和以显示如何存储,包括引用(假设bar=baz
):
$ declare -p foo
declare -- foo="{
\"Comment\": \"Update DNSName.\",
\"Changes\": [
{
\"Action\": \"UPSERT\",
\"ResourceRecordSet\": {
\"Name\": \"alex.\",
\"Type\": \"A\",
\"AliasTarget\": {
\"HostedZoneId\": \"######\",
\"DNSName\": \"baz\",
\"EvaluateTargetHealth\": false
}
}
}
]
}"
因为t他的扩张shell元字符,你可能会遇到麻烦,如果你的JSON包含有类似*
,所以或者,你可以直接分配,但要小心引述周围$bar
:
foo='{"Comment":"Update DNSName.","Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"alex.","Type":"A","AliasTarget":{"HostedZoneId":"######","DNSName":"'"$bar"'","EvaluateTargetHealth":false}}}]}'
通告$bar
的引用:这是
"'"$bar"'"
^^^ ^^^
||| |||
||| ||literal double quote
||| |opening syntactical single quote
||| closing syntactical double quote
||opening syntactical double quote
|closing syntactical single quote
literal double quote
这工作完美,特别是感谢酒吧的报价细目,解决了未来的问题! – Alex