一尘不染

PowerShell:避免传递给外部程序的字符串中的双引号转义的最佳方法?例如,JSON字符串

json

我阅读了有关在PowerShell中转义字符串的所有文章,但我仍然没有找到让我满意的解决方案。

假设我有一个foo.json包含JSON字符串的文件。我需要将JSON字符串作为参数传递给程序。

在bash中,这很好用:

myprogram "$(cat ~/foo.json)"

在PowerShell中,当我正常读取文件的内容并将其传递时,接收程序会抱怨键和值周围没有引号。

我想出的是:

$json = (get-content ~/foo.json | Out-String) -replace '"','""' myprogram $json

在PowerShell中是否有一种不太麻烦的方式来做到这一点?我不得不退出会话,以bash运行命令,然后再次启动会话。


阅读 330

收藏
2020-07-27

共1个答案

一尘不染

不幸的是, PowerShell将带有嵌入式双引号的参数传递给 外部程序的方式 已损坏,需要您 手动 \转义
\"

myprogram ((Get-Content -Raw ~/foo.json) -replace '"', '\"')

请注意,使用Get-Content -Raw,比Get-Content ... | Out-String将整个文件读取为 单个
多行字符串更好,但是请注意,它需要PSv3 +。

2020-07-27