PowerShell 类似运算符及更多:提升你的脚本编写水平

像许多其他编程语言一样,PowerShell具有各种比较运算符。然而,与其他语言不同的是,这些比较运算符可能看起来有点奇怪。不是使用 `==`,而是使用 `eq`。不是使用 `<>`,而是使用 `ne`。对新手来说可能会有点混淆。让我们查看本文中的 PowerShell like 运算符和其他比较运算符。

使用 `eq` 和 `ceq` 运算符进行相等性测试

在PowerShell中,要检查一个对象是否等于另一个对象,可以使用 `eq` 运算符。`eq` 运算符比较许多类型的简单对象,如字符串、布尔值、整数等等。当使用时,`eq` 运算符将根据结果返回布尔值 `True` 或 `False`。

`-eq` 运算符需要两个要比较的值。假设你将一个字符串赋给一个名为 `$string` 的变量。你想要将此变量的值与字符串值 `"PowerShell"` 进行比较,以确保它们相等。

在下面的示例中,您可以看到我们将值PowerShell分配给变量$string。然后,使用eq运算符,示例比较$string的值与字符串powershell。很简单,对吧?但等等,它们实际上并不是完全相同的。

PS> $string = "PowerShell"
PS> $string -eq "powershell"
True

请注意,=是一个赋值运算符,而不是一个比较运算符。在PowerShell中,您不能使用=来比较一个值和另一个值。

使用ceq运算符测试大小写敏感性

在上面的示例中,请注意即使字符串不完全相同,eq返回了一个布尔值True。这种行为发生是因为eq运算符不区分大小写。要测试区分大小写的相等性,请使用ceq运算符。ceq运算符与eq完全相同,唯一的区别是区分大小写。

您可以在以下代码片段中看到使用ceq的示例。现在注意PowerShell看到了区分大小写的差异。

PS> $string -ceq "PowerShell"
True 
PS> $string -ceq "powershell"
False

使用necne运算符测试不相等性

就像eqceq测试相等性一样,PowerShell有一对执行相反操作的运算符,称为necne。与它们的对应物一样,这两个运算符执行完全相同的操作,但相反。

PS> $string = "PowerShell"
PS> $string -ne "PowerShell"
False
PS> $string -cne "PowerShell"
False
PS> $string -cne "powershell"
True

测试集合中的项目

通常,eqceq 操作符用于标量或单一值,如字符串、整数和布尔值。但是这些操作符也可以在集合中找到特定值的实例,比如数组。

请注意下面的示例,我们正在创建一个包含 12 个整数的数组。也许你想找到数组中等于数字 9 的所有实例。没问题,使用 eq 操作符针对数组返回所有与比较整数相等的实例。

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -eq 9
9
9
9
9
PS> ($array -eq 9).Count
4

测试集合包含值

既然你刚学习了如何使用 eq 操作符来查找数组中的实例,让我们再进一步介绍“包含”操作符。这些操作符包括 containsnotcontainsinnotin。这些操作符返回一个布尔值 TrueFalse,指示集合是否包含一个实例。

看看下面的例子。在这个例子中,我们创建了一个包含九个整数的数组。如果你想要一个简单的是/否答案,判断该数组是否包含某个整数,你可以使用 containsnotcontains

PS> $array = @(2,4,5,6,8,8,9,9,9)
PS> $array -contains 9
True
PS> $array -notcontains 9
False
PS> $array -contains 5

类似地,你还有 innotin 操作符。这些操作符与 containsnotcontains 几乎相同,只有一个例外:要比较的值在左边而不是右边。

$array = @(2,4,5,6,8,8,9,9,9)
9 -in $array
True
9 -notin $array
False

使用 gtge 操作符进行“大于”测试

发生什么情况如果你需要测试一个数字(一个整数)是否大于另一个数字或者大于或等于另一个数字?你会使用gtge运算符。这些运算符用于比较整数。

与其他运算符一样,这些运算符根据一个整数是否大于另一个整数返回布尔值TrueFalse。这两个运算符都测试左侧整数是否大于或大于等于右侧整数。

在下面的示例中,你可以看到每个运算符的行为。

PS> 7 -gt 5
True
PS> 7 -gt 7
False
PS> 7 -ge 7
True

与允许你在集合中查找实例的eq运算符类似,你也可以使用gegt运算符进行相同的操作。PowerShell会遍历集合中的每个项,并将每个值与你提供的值进行比较。你可以在下面看到一个很好的例子。

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -gt 5
6
7
8
9
9
9
9
PS> $array -ge 5
5
6
7
8
9
9
9
9

使用ltle运算符测试“小于”

gtge运算符类似,ltle运算符执行相同的功能,但方向相反。ltle运算符比较两个值,测试左侧的整数是否小于或小于等于右侧的整数。

在下面的示例中,可以看到与gtge相同的比较集合中每个值的功能。

PS> $array =@(1,2,3,4,5,6,7,8,9,10)
PS> $array -lt 5
1
2
3
4
PS> $array -le 5 
1
2
3
4
5

基于通配符的匹配与PowerShell的Like运算符

到目前为止,您已经学会了如何执行1:1匹配。到目前为止使用的所有运算符都是将一个完整值与另一个进行比较,但是PowerShell还有另一个技巧。您还可以基于通配符或星号比较值。

假设您只知道字符串的一部分字符。您不能使用eq,因为eq需要您知道整个字符串。使用PowerShell的like运算符,您不需要知道整个字符串。要测试值是否like另一个,您可以用通配符替换您不知道的部分。

与其他运算符一样,这种功能也可以应用于集合。

您可以看到一个PowerShell like的示例,以及它的区分大小写的兄弟clike

PS> $string = "PowerShell"
PS> $string -like "*Shell"
True
PS> $array = @("PowerShell","Microsoft")
PS> $array -like "*Shell"
PowerShell
PS> $array -clike "*Shell"
PowerShell

运算符-notlike如果没有找到匹配项,则返回布尔值True,如果有匹配项,则返回False。如果针对一个集合使用,它将返回所有不匹配-notlike运算符右侧给定模式的其他值。要添加模式的区分大小写,使用-cnotlike运算符。

$string = "PowerShell" 
$string -notlike "*Shell"
False
$array = @("PowerShell","Microsoft")
$array -notlike "*Shell"
Microsoft
$array -cnotlike "*shell"
PowerShell
Microsoft

基于正则表达式的匹配

操作符和它的相关操作符非常方便,但是一旦你需要更复杂的匹配时。这时,你可以深入了解正则表达式(regex)的深邃而黑暗的世界。使用matchnotmatch操作符,你可以使用正则表达式执行极其复杂的字符串匹配。

与 PowerShell like 操作符类似,match及其相对应的 notmatch,会比较两个字符串并返回布尔值 TrueFalse。同时,与其他操作符类似,相同的行为也可以应用于集合,如下面的示例所示。

PS> $string = "PowerShell"
PS> $string -match "ow"
True 

PS> $array = @("PowerShell","Microsoft")
PS> $array -match "ow"
PowerShell

PS> $string = "PowerShell"
PS> $string -cmatch "po"
False
PS> $string -cmatch "Po"
True

PS> $array = @("PowerShell","Microsoft")
PS> $array -cmatch "Po"
PowerShell

总结

在本文中,你学习了关于 PowerShell like 操作符和许多其他操作符以及如何针对单个值和集合使用每个操作符。你已经看到输出如何根据操作符和标量或集合而异。

此外,你还了解了区分大小写的操作符,匹配操作符如何基于正则表达式或通配符进行匹配,以及包含操作符用于测试对象是否包含特定值或特定对象中是否存在某个值。

PowerShell Like

Source:
https://adamtheautomator.com/powershell-like/