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

Tat*_*eva 3 powershell json

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

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

在 bash 中,这很好用:

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

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

我想出的是:

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

在 PowerShell 中是否有一种不那么尴尬的方法来做到这一点?我已经退出会话,在 bash 中运行命令,然后再次启动会话。

mkl*_*nt0 7

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

myprogram ((Get-Content -Raw ~/foo.json) -replace '"', '\"')
Run Code Online (Sandbox Code Playgroud)

注意使用的Get-Content -Raw,而最好Get-Content ... | Out-String的整个文件读入一个单一的,多行字符串,但要注意,它需要PSv3 +。

有关更多信息,请参阅此答案