我已经尝试了好一阵子了,但是我似乎无法弄清楚这两者之间的区别。特别是,与数据数组有关的差异:
PS C:>$myarray = "a", "ab", "abc"
PS C:>$myarray -match "b"
ab
abc
PS C:>$myarray | where {$_ -match "b"}
ab
abc
谁能帮助我了解这两种选择之间的区别(如果有)吗?
谢谢!
最佳答案
至少没有结果。如果将比较运算符应用于数组,则返回一个(这意味着将其应用于每个数组元素,并将返回返回$true
的那些元素)。另一个方法是将数组传递给进行过滤的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
使用“正确”的方式。关于arrays - -match…和|之间的区别其中{$ _ -match…},我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39780205/