为什么powershell在更换时会删除其中一个'$'?

时间:2013-09-16 05:40:47

标签: regex powershell

我一直在摸不着头脑,最终只是使用String.Replace,但是,我想知道Powershell在做什么,有人可以向我解释一下吗?

>"aaa" -replace "aaa", 'GG$$`~~'

结果:

GG$`~~

而不是

GG$$`~~

我的印象是单引号阻止了字符串中的东西扩展,这与正则表达式有关吗?如果我在每一美元和反推之间放置一些东西,它就可以了,但这不是我想要的......

编辑:

似乎是它的组合:

"aaa" -replace "aaa", '$$' --> "$"
"aaa" -replace "aaa", '$`' --> ""

虽然

,但我仍然不知道为什么会这样做

2 个答案:

答案 0 :(得分:1)

在替换中$表示反向引用。

E.g。如果您使用:

"aaa" -replace "(aaa)", 'GG$1`~~'
GGaaa`~~

使用:

"aaa" -replace "(aaa)", 'GG$$1`~~'
GG$1`~~

所以,真正放置$$意味着你要放置一个文字$字符。如果变量不存在......

"aaa" -replace "aaa", 'GG$`~~'
GG~~

shell试图找到变量$`,但由于它不存在,你会得到一个空字符串。

所以,要获得

GG$$`~~

你必须使用4 $:

"aaa" -replace "(aaa)", 'GG$$$$`~~'
GG$$`~~

每对$$表示一个文字$

使用相同的逻辑......

"aaa" -replace "aaa", '$$' --> "$"
"aaa" -replace "aaa", '$`' --> "" //Because the variable $` doesn't exist, it's 'null'.

答案 1 :(得分:0)

在正常的正则表达式中,美元符号('$')表示字符串的结尾...

在上面的示例中,您使用$符号在字符串之后返回,因此它不会转义处理该字符串: 根据这里:http://ss64.com/ps/syntax-esc.html

应该是:'GG` $ ~~'