首页 > 解决方案 > PowerShell 转义序列

问题描述

我已经搜索了 PS 的逃生规则,但我无法理解为什么有时唯一的工作。例如,如果我将字符串参数传递给 cmdlet,似乎所有的赌注都没有了。

PowerShell 'echo "Hello there"'

我希望这会产生: 的输出Hello there,但是 PowerShell 完全忽略了双引号,并且无论我使用哪种转义序列,它都拒绝承认它们甚至存在于字符串中。当然,以上只是一个例子。无论我使用哪个 cmdlet,只要传递了一个字符串,所有看似平淡无奇的转义规则都不适用。通过 PowerShell 将字符串传递给 Node.JS 也是如此:

node -p 'console.log("Hello")'

这再次引发错误,因为 PowerShell 决定丢弃我的双引号并假装它们不存在。

有趣的是,如果我交换引号,就像这样:

node -p "console.log('Hello')"

它会产生正确的结果,尽管字符串中的任何双引号都会立即破坏它。太奇怪了,转义规则似乎不适用于字符串参数。我误解了规则吗?有没有办法在 PS 不会完全忽略的单引号字符串参数中使用双引号?

感谢您的任何见解。

标签: stringpowershellescapingdouble-quotessingle-quotes

解决方案


此链接包含我使用的大部分规则: https ://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7

反引号用于抵消变量插值:

"`$var" == $var

在双引号字符串中保留双引号: "As they say, ""live and learn."""

如果你有具体的例子,我们可以深入研究。


推荐阅读