我一直試圖找出這一個現在一段時間,但我似乎無法弄清楚這兩者之間的區別。特別是,差異,因爲它們涉及到一組數據:
PS C:>$myarray = "a", "ab", "abc"
PS C:>$myarray -match "b"
ab
abc
PS C:>$myarray | where {$_ -match "b"}
ab
abc
誰能幫助我明白了什麼,如果有的話,區別是這兩個選項之間?
謝謝!
我一直試圖找出這一個現在一段時間,但我似乎無法弄清楚這兩者之間的區別。特別是,差異,因爲它們涉及到一組數據:
PS C:>$myarray = "a", "ab", "abc"
PS C:>$myarray -match "b"
ab
abc
PS C:>$myarray | where {$_ -match "b"}
ab
abc
誰能幫助我明白了什麼,如果有的話,區別是這兩個選項之間?
謝謝!
結果至少沒有。一個是將一個比較運算符應用於一個數組(這意味着它將應用於每個數組元素,而那些返回的數組元素將返回)。另一個是將數組傳遞給過濾的cmdlet。結果是一樣的。
你可以發揮創意和解決另一種方式同樣的事情:
$myarray | foreach { if ($_ -match 'b') { $_ } }
不過請注意,當左操作數不是一個數組,其結果是不同的:
PS Home:\> ,'b' -match 'b'
b
PS Home:\> 'b' -match 'b'
True
所以,如果你有,你是不知道它是否是一個數組或者不是你既可以強制它是一個變量:
@($foo) -match 'b'
或使用Where-Object
這將做正確的事情。
就我個人而言,我傾向於直接在控制檯編寫PowerShell代碼時使用操作符。它使一個不錯的簡潔grep
等同得好:
(gc file) -match 'regex'
(我真的應該開始使用Select-String
更多的時候,雖然)。
但編寫需要腳本時,我用的是「正確」的方式與Where-Object
強健或其他人必須閱讀/維護。
$array -match 'value'
- 直接檢查每個值的字符串表示,這是非常快速的(在大型陣列尤其明顯)$array | where { $_ -match 'value' }
- 在每個項目上執行腳本塊,因此:
這也是超級有用,謝謝一堆! –
完全哦,我可以告訴大家,結果似乎永遠是一樣的,但我只是想確認有沒有一些細節或細節是使它們在使用上截然不同。 非常感謝(特別是對於編輯!),爲我清除了一切! –
只是我的2美分,我發現'選擇字符串'是非常快的。 – sodawillow
@sodawillow好奇,我該如何利用'Select-String'來完成這樣的事情?我已經閱讀了一些,但我不太明白它的作用。 –