我对这个有点失落。无论出于何种原因,powershell中的替换函数对于以$符号结尾的变量不能很好地发挥作用。
命令:
$var='A#$A#$'
$line=('$var='+"'"+"'")
$line -replace '^.+$',('$line='+"'"+$var+"'")
预期产出:
$line='A#$A#$'
实际输出:
$line='A#$A#
答案 0 :(得分:4)
看起来你正在受到你不想要的正则表达式替换。正则表达式特殊变量$'
表示匹配后的所有内容。由于正则表达式匹配整个字符串,$'
实际上是空的。在替换操作期间,.Net正则表达式引擎在预期输出中看到$'
并替换为该空字符串。
避免这种情况的一种方法是用$
替换$var
字符串中$$
的所有实例:
$line -replace '^.+$',('$line='+"'"+($var.Replace('$','$$'))+"'")
您可以在此处查看有关正则表达式替换的更多信息:
<强> Substitutions 强>
答案 1 :(得分:0)
我能够通过用特殊字符替换$然后在更改后将其还原来找到各种各样的创可贴。您最好选择键盘上没有键的字符。对我来说,我选择了“¤”。
$var='A#$A#$'
$var=$var -replace '\$','¤'
$line=("`$var=''")
$line -replace '^.+$',("`$line='$var'") -replace '¤','$'
答案 2 :(得分:0)
我真的不明白你张贴的线条的目的,在我看来,做$line='$line='''+$var+"'"
会更有意义,但如果你坚持你的方式,只需要两个< / strong>更换电话,如下:
$line -replace '^.+$',('$line=''LOL''') -replace 'LOL',$var