Powershell正在GitHub操作中吃引号



我在 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 '"', '"'

有关如何将此技术应用于可扩展字符串("..."(以及如何使正则表达式更健壮以正确处理数据中预先存在的"序列,请参阅此答案。

相关内容

最新更新