在PowerShell中转义单引号

时间:2014-03-20 06:43:19

标签: powershell

我的代码中有一个替换语句,Band正在被Cig取代。然而,当我把单引号时,它采取了第一句话......示例'乐队'

我尝试使用双引号,但它不起作用。你知道怎么逃避单引号吗?

-replace 'Band's', 'Cig's'

3 个答案:

答案 0 :(得分:7)

从内置帮助中查看Escape characters, Delimiters and QuotesGet-Help about_Quoting_Rules(如Nacimota所指出的那样)。

要在单引号字符串中加入',只需将其加倍''即可。 (单引号文字不支持任何其他转义字符。)

> "Band's Toothpaste" -replace 'Band''s', 'Cig''s'

或者,只需切换到双引号即可。 (当希望使用插值或转义字符时,需要双引号文字。)

> "Band's Toothpaste" -replace "Band's", "Cig's"

(不要忘记-replace使用正则表达式

答案 1 :(得分:3)

使用两个单引号转义单引号:

"Band's Toothpaste" -replace 'Band''s', 'Cig''s'

另外,这是重复的 Can I use a single quote in a Powershell 'string'?

答案 2 :(得分:3)

对于普通情况,您可以使用嵌入的转义字符。对于更复杂的情况,您可以使用here-strings。

$Find = [regex]::escape(@'
Band's
'@)

$Replace = @'
Cig's
'@

"Band's Toothpaste" -replace $Find,$Replace

然后将要搜索的文字文本放在here-strings中。

正常引用规则不适用于here-string @' - ' @ delimiters,所以你可以在任何你想要的地方放置你想要的任何类型的引号,而不需要任何转义字符。

$ Find上的[regex] :: excape()将处理可能在搜索模式中的任何正则表达式保留字符的反斜杠转义。