PowerShell 包含运算符
PowerShell 中有不同的运算符可以过滤/比较或查找与指定输入字符串匹配的元素。 -contains
是主要的比较运算符之一,被归类为包含类型的运算符。
有四种主要的包含类型运算符。
-contains
-notcontains
-in
-notin
在本文中,我们只关注 -contains
运算符。如果匹配,此运算符始终返回布尔值 (true/false)。此外,性能方面的 -contains
运算符返回结果的速度非常快,因为一旦找到第一个匹配项,它就会停止比较输入。
PowerShell 中的 -contains
运算符
此运算符可用于检查集合是否包含特定元素。它的语法如下。
[set/collection] -contains [test-value or test-object]
[set/collection]
可以是一组字符串值(逗号分隔),例如,"Hello"
或 "FOX", "2ndLane"
。
[test-value or test-object]
可以是一个元素或一组元素(集合),例如,"Hello"
或 "Hello", "FOX", "No2"
。
检查某个元素
- 示例 01:
"Hello", "FOX", "2ndLane" -contains "2ndLane"
输出:
True
输入元素/值是"2ndLane"
,它可以位于左侧集合/集合中。因此,输出/结果显然是 True
。
- 示例 02:
"Hello", "FOX", "2ndLane" -contains "NotInTheCollection"
输出:
False
输入元素/值是"NotInTheCollection"
,它不包含在右侧集合中。因此,上述命令被评估为 False
。
关于 -contains
运算符的重要事实是它检查给定集合/集合中的确切输入元素。当部分/子字符串作为输入元素时,该命令将被评估为 False
。
- 示例 03:
"Hello", "FOX", "FullStringGiven" -contains "StringGiven"
输出:
False
在上面的示例中,输入元素是 "StringGiven"
,但它是右侧集合的 "FullStringGiven"
元素的子字符串。因此,输入元素与右侧集合中的精确元素不匹配,结果如预期的那样为 False
。
在 PowerShell 中使用 -contains
运算符检查一组元素/集合
-contains
运算符的最大优点之一是它可用于查找给定集合/集合是否与输入集合匹配。重要的是要记住,运算符检查左侧(给定集合)和右侧(输入集合/测试集合)是否存在相同的实例。这意味着当输入对象(测试对象)是一个集合时,这些包含运算符使用引用相等。
示例 01
$leftsideobj = "Hello", "NewString1"
在这里,我们将 $leftsideobj
变量分配给元素集(集合)。
$leftsideobj, "AnotherString" -contains $leftsideobj
然后,我们使用 -contains 运算符来查找匹配项。
输出:
True
该命令已被评估为 True
。因为输入集合是 $leftsideobj
,并且左侧集合中存在相同的实例。这意味着已经实现了引用相等。因此,结果为 True
。
示例 02
$newleftsideobj = "Hello", "Test"
在这里,我们将 $newleftsideobj
变量分配给包含"Hello"
和"Test"
元素的集合。
`"Hello", "Test", "NewString1" -contains $newleftsideobj`
输出:
False
上述命令被评估为 False
。你可以看到输入集合(右侧)是 $newleftsideobj
,其中间接包含"Hello"
和"Test"
两个元素。如果你注意到左侧,我们可以使用"Hello"
和"Test"
元素。但它不满足引用相等。这就是为什么输出是 False
的原因。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.