我一直在摸不着头脑,最终只是使用String.Replace,但是,我想知道Powershell在做什么,有人可以向我解释一下吗?
>"aaa" -replace "aaa", 'GG$$`~~'
结果:
GG$`~~
而不是
GG$$`~~
我的印象是单引号阻止了字符串中的东西扩展,这与正则表达式有关吗?如果我在每一美元和反推之间放置一些东西,它就可以了,但这不是我想要的......
编辑:
似乎是它的组合:
"aaa" -replace "aaa", '$$' --> "$"
"aaa" -replace "aaa", '$`' --> ""
虽然
,但我仍然不知道为什么会这样做答案 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` $ ~~'