我有这个 PowerShell 代码,它应该是一个简单的替换,但它没有达到我的预期。
$Text = "This is so$me! password with @special #characters$."
$Pattern = [regex]::Escape('$')
$CleanText = $Text -replace $Pattern, '`$'
Write-Host $CleanText
这将返回输出:
注意这不会在第一个 $ 字符前面添加反引号。但它确实适用于最后一个。 PowerShell 将字符串中的 $me 作为变量读取,但由于某种原因,它完全删除了它。
我也尝试了以下方法,结果相同:
$Text = "This is so$me! text with @special #characters$."
$CleanText = $Text -replace '\$', '`$'
Write-Host $CleanText
您发布的代码片段的问题出现在第一条语句中:
$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 中不同字符串文字表达式的行为的更多信息