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.