下面的比较在PowerShell中给出假结果,希望它是真的。'操作符导致它为假,而对于任何其他特殊字符,它返回真。
> 'abc`@01' -like 'abc`@01'
False
-like
是通配符比较运算符,`
是通配符转义序列。
PS ~> 'abc`@01' -like 'abc``@01'
True
如果您想要精确的字符串比较而不必担心转义引用字符串,请使用-eq
:
PS ~> 'abc`@01' -eq 'abc`@01'
True
添加到Mathias R. Jessen的有用答案:
有时您可能正在处理应该成为通配符表达式部分的字符串,但是本身应该按照的意思处理,这需要用 。 很遗憾,从PowerShell Core 7.2.0-rc开始。1、有一个bug: 换句话说:对于问题中的特定通配符模式,此技术将不起作用。`
转义通配符元字符* ? [ ] `
[WildcardPattern]::Escape()
允许您以编程方式# The value to use *literally* as part of a wildcard expression below.
$literalValue = '[1]'
# Escape it for use in the wildcard expression.
# -> '`[1`]'
$escapedValue = [WildcardPattern]::Escape($literalValue)
'file[1]' -like ('*' + $escapedValue) # -> $true
`
本身,即使认为它应该转义为``
,也是而不是转义,Mathias在GitHub问题#16306中报告过。