在PowerShell中,–Match,-Like和–Contains运算符有什么区别?

上面提到的所有上述3个运算符(Match, Like, Contains)都是PowerShell中的比较运算符。MatchLike运算符几乎相似,唯一的区别是通配符和Contains运算符完全不同。我们将看到示例并了解它们如何工作。

示例

PS C:\WINDOWS\system32> "This is a PowerShell String" -Match "PowerShell"
True
PS C:\WINDOWS\system32> "This is a PowerShell String" -Like "PowerShell"
False
PS C:\WINDOWS\system32> "This is a PowerShell String" -Contains "PowerShell"
False

如果您看到上面示例的输出,则仅对于Match语句,结果为True,原因是当您匹配字符串中的关键字时,它将检查关键字是否存在。不管您使用的关键字是单个关键字还是关联词。以下语句也是正确的。

PS C:\WINDOWS\system32> "This is a PowerShell String" -Match "Shell"
True

但是通配符(*)对Match运算符没有帮助。

PS C:\WINDOWS\system32> "This is a PowerShell String" -Match "*PowerShell*"
parsing "*PowerShell*" - Quantifier {x,y} following nothing.
At line:1 char:1
+ "This is a PowerShell String" -Match "*PowerShell*"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException

因此,Match条件不会评估正则表达式运算符。相反,Like运算符与通配符(*)一起使用。

PS C:\WINDOWS\system32> "This is a PowerShell String" -like "*PowerShell*"
True

因此,通配符在Match和Like运算符之间起主要作用。我们可以使用Contains运算符检查通配符(*)的使用。

PS C:\WINDOWS\system32> "This is a PowerShell String" -contains "*PowerShell*"
False

Contains运算符也不能与通配符(*)一起使用。它是与MatchLike完全不同的运算符,并且可以处理对象集合(Array)

PS C:\WINDOWS\system32> "Apple","Dog","Carrot","Cat" -contains "dog"
True