1

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

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

结果是:

GG$`~~

而不是

GG$$`~~

我的印象是单引号阻止了字符串中内容的扩展,这与正则表达式有关吗?如果我在每一美元和反引号之间加上一些东西,它会起作用,但这不是我想要的......

编辑:

似乎它是多种事物的结合:

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

我仍然不知道为什么要这样做

4

2 回答 2

1

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

例如,如果您使用:

"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'.
于 2013-09-16T06:48:28.783 回答
0

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

在上面的例子中,你在带有 $ 符号的字符串后面有你的反勾号,因此它不会在那个字符串上转义:根据这里:http ://ss64.com/ps/syntax-esc.html

应该是:'GG`$~~'

于 2013-09-16T05:44:10.540 回答