3

我对这个有点迷茫。无论出于何种原因,powershell 中的替换函数都不能很好地处理以 $ 符号结尾的变量。

命令:

$var='A#$A#$'
$line=('$var='+"'"+"'")
$line -replace '^.+$',('$line='+"'"+$var+"'")

预期输出:

$line='A#$A#$'

实际输出:

$line='A#$A#
4

3 回答 3

4

看起来您遇到了不想要的正则表达式替换。正则表达式特殊变量$'表示匹配后的所有内容。由于您的正则表达式匹配整个字符串,$'因此实际上是空的。在替换操作期间,.Net 正则表达式引擎$'会在您的预期输出中看到并替换该空字符串。

避免这种情况的一种方法是将$字符串中的$var所有实例替换为$$

$line -replace '^.+$',('$line='+"'"+($var.Replace('$','$$'))+"'")

您可以在此处查看有关 .Net 中正则表达式替换的更多信息:

换人

于 2012-08-31T15:52:06.917 回答
0

通过将 $ 替换为特殊字符,然后在更改后将其恢复回来,我能够找到某种创可贴。最好选择一个键盘上没有键的字符。对我来说,我选择了“¤”。

$var='A#$A#$'
$var=$var -replace '\$','¤'
$line=("`$var=''")
$line -replace '^.+$',("`$line='$var'") -replace '¤','$'
于 2012-08-31T16:52:34.087 回答
0

我不太了解您发布的行的目的,在我看来这样做更有意义$line='$line='''+$var+"'",但是如果您坚持自己的方式,只需进行两次替换调用,如下所示:

$line -replace '^.+$',('$line=''LOL''') -replace 'LOL',$var

于 2012-08-31T17:39:07.780 回答