我在 GitHub Action 中有这一行:
curl https://api.github.com/repos/JJ/raku-advent-calendar-article-2019/issues/$ENV:ISSUE/comments -H "Authorization: token $ENV:TOKEN" -H "Content-Type: application/json" --data $output
我还没有找到一种方法来为$data
分配值以使其工作。GitHub Actions,或Powershell,或两者兼而有之,通常以报价的方式削减它,但我真的找不到它的作用和位置。
这是我最后一次尝试:
'{ `"body`": `"Merry Xmas to you too!`"}'
请注意双引号的Powershell转义。这返回了此错误:
curl: (6) Could not resolve host: Xmas
所以,出于某种原因,它停在了梅里。知道吗?
这个问题是相似的,但是,他们没有使用变量来保存我需要的结果。
如果您使用的是PowerShell,请使用本机PowerShell函数,如Invoke-RestMethod
,它接受PowerShell数据结构,而不必担心序列化/反序列化。
Invoke-RestMethod -Uri $Uri -Headers @{Authorization = "token $env:TOKEN"; "Content-Type" = "application/json"} -Body @{body = "Merry Xmas to you too!"}
-
'...'
是PowerShell中的逐字字符串,因此嵌入"
不需要转义-`
字符被视为文字。 -
然而,遗憾的是,PowerShell 在调用外部程序(如
curl
(时对嵌入式"
的处理从根本上被破坏了,需要您在v7.2.x 之前的所有 PowerShell 版本中手动转义它们。
- 这个长期存在的问题在PowerShell(核心(7.3+中得到了修复,但在Windows上有选择性的例外 - 请参阅此答案。
因此:
$jsonForCurl = '{ "body": "Merry Xmas to you too!" }'
若要以编程方式将此转义应用于现有字符串值,请使用以下命令:
$json = '{ "body": "Merry Xmas to you too!" }'
$jsonForCurl = $json -replace '"', '"'
有关如何将此技术应用于可扩展字符串("..."
(以及如何使正则表达式更健壮以正确处理数据中预先存在的"
序列,请参阅此答案。