在 PowerShell 脚本中转义字符串中的多个 $ 字符

问题描述 投票:0回答:1

我有这个 PowerShell 代码,它应该是一个简单的替换,但它没有达到我的预期。

$Text = "This is so$me! password with @special #characters$."

$Pattern = [regex]::Escape('$')
$CleanText = $Text -replace $Pattern, '`$'

Write-Host $CleanText

这将返回输出:

  • 这是so!带有@special #characters`$的密码。

注意这不会在第一个 $ 字符前面添加反引号。但它确实适用于最后一个。 PowerShell 将字符串中的 $me 作为变量读取,但由于某种原因,它完全删除了它。

我也尝试了以下方法,结果相同:

$Text = "This is so$me! text with @special #characters$."

$CleanText = $Text -replace '\$', '`$'

Write-Host $CleanText
powershell escaping
1个回答
0
投票

您发布的代码片段的问题出现在第一条语句中:

$Text = "This is so$me! password with @special #characters$."

使用双引号

"
定义的字符串文字会被 PowerShell 的解析器解释为 expandable,因此,当您执行
$me
操作时,
-replace
已经被求值了。

使用单引号定义verbatim字符串文字表达式:

$Text = 'This is so$me! password with @special #characters$.'

请参阅

about_Quoting_Rules
帮助主题,了解有关 PowerShell 中不同字符串文字表达式的行为的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.