我正在尝试使用命令更新汇合页面
curl --request PUT --url "https://<url>/wiki/rest/api/content/<id>" --user $TOKEN --header 'Accept: application/json' --header 'Content-Type: application/json' --data '{
"id": <id>",
"type": "page",
"status": "current",
"pageId": <id>",
"title": <title>,
"body": {
"atlas_doc_format": {
"value": "{\"version\":1,\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"TXT CONTENT\"}]}]}",
"representation": "atlas_doc_format",
"content": {
"id": <id>
}
}
},
"version": {
"number": <no>,
"message": "test"
}
}'
它工作正常,但是当我尝试传递变量值而不是 TXT CONTENT 时,变量的内容不会传递,例如当我有 导出VV =“测试文本” 并尝试将其传递到体内:
"body": {
"atlas_doc_format": {
"value": "{\"version\":1,\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"$VV\"}]}]}",
"representation": "atlas_doc_format",
"content": {
"id": <id>
}
}
}
页面更新为“$VV”而不是“测试文本”
我还尝试了“'”$VV”'”,{{VV}},“'$VV'”,“'{{VV}}'”,“%VV%”,其中一个解决方案对我有用。我想用我从文件中读取并存储在变量中的内容更新页面。有什么想法吗?
Bash 变量不会在单引号内扩展。如果您可以信任变量的内容,并且它很简单,因为它不需要任何特殊的 JSON 编码(例如,由于包含特殊字符),只需关闭单引号字符串,打开双引号字符串,将您的变量,并以相反的顺序关闭/打开报价:
curl … --data '{ … \"text\":\"'"$VV"'\" … }'
^^^^^^^
但稳健的方法是让 JSON 处理器将外部值引入到 JSON 数据中。这会自动解决任何编码问题。以 jq 为例,使用
--arg text "$VV"
定义 jq 内部变量,并使用 $text
在内部对其求值:
curl … --data "$(jq -nc --arg text "$VV" '{
id: "<id>", type: "page", status: "current", pageId: "<id>", title: "<title>",
body: {
atlas_doc_format: {
value: {
version: 1, type: "doc",
content: [{
type: "paragraph",
content: [{type: "text", $text}]
}]
} | @json,
representation: "atlas_doc_format",
content: {id: "<id>"}
}
},
version: {number: "<no>", message: "test"}
}')"