我之前看过类似的问题,但并没有准确回答我的问题。
我正在使用 cURL 发送 JSON 请求,如下所示:
curl -X POST -H "Content-Type:application/json" "$HOST" -d '{"uri": "'"$URI"'", "identityKeyValue":"'"`date +%s`"'", "identityKeyType": "bar", "status": "'$STATUS'", "statusDetail": "'"$STATUS_DETAIL"'", "exclusionKeys": [], "monitoredEntity": {"name": "foobar"}, "timestamp":'"`date +%s`"', "metadata": {} }'
它确实有效,但是非常丑陋(我说的是之后的部分-d
),但我找不到满足以下条件的更好的东西:
- 支持变量替换(如
$STATUS
) - 支持命令替换(如
`date +%s`
)
由于它是 JSON,显然需要很多双引号 ( "
)
命令不必只有一行。我想要可读性和清晰度,而不是这种混乱/杂乱的外观。你有什么建议?
答案1
将其分解为多个步骤并使用printf
模板:
fmt='{"uri": "%s", "identityKeyValue":"%s", "identityKeyType": "bar", "status": "%s", "statusDetail": "%s", "exclusionKeys": [], "monitoredEntity": {"name": "foobar"}, "timestamp":%d, "metadata": {}}'
time=$(date +%s)
data=$(printf "$fmt" "$URI" $time "$STATUS" "$STATUS_DETAIL" $time)
curl -X POST -H "Content-Type:application/json" "$HOST" -d "$data"
另外,摆脱使用 ALL_CAPS_VARNAMES 的习惯:有一天你会不小心使用 PATH,然后想知道为什么你的程序崩溃了。