我已经想了一段时间了,但我似乎找不出这两者的区别。特别是,它们与一系列数据有关的差异:
PS C:>$myarray = "a", "ab", "abc"
PS C:>$myarray -match "b"
ab
abc
PS C:>$myarray | where {$_ -match "b"}
ab
abc谁能帮我理解这两种选择之间的区别,如果有的话?
谢谢!
发布于 2016-09-29 21:24:48
至少在结果中没有。如果将比较运算符应用于数组(这意味着将其应用于每个数组元素并返回其返回$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的“适当”方式。
发布于 2016-09-29 21:41:16
$array -match 'value' -直接检查每个值的字符串表示形式,这是非常快的(特别是在大型数组中)$array | where { $_ -match 'value' } -对每个项执行scriptblock,因此:
https://stackoverflow.com/questions/39780205
复制相似问题