首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >-match之间的区别..。{$_ -match .}

-match之间的区别..。{$_ -match .}
EN

Stack Overflow用户
提问于 2016-09-29 21:20:21
回答 2查看 461关注 0票数 1

我已经想了一段时间了,但我似乎找不出这两者的区别。特别是,它们与一系列数据有关的差异:

代码语言:javascript
运行
复制
PS C:>$myarray = "a", "ab", "abc"
PS C:>$myarray -match "b"
ab
abc
PS C:>$myarray | where {$_ -match "b"}
ab
abc

谁能帮我理解这两种选择之间的区别,如果有的话?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-29 21:24:48

至少在结果中没有。如果将比较运算符应用于数组(这意味着将其应用于每个数组元素并返回其返回$true的元素),则返回一个比较运算符。另一个是将数组传递给一个进行过滤的cmdlet。结果是一样的。

你可以发挥创造力,用另一种方式解决同样的问题:

代码语言:javascript
运行
复制
$myarray | foreach { if ($_ -match 'b') { $_ } }

但是,请注意,当左操作数不是数组时,结果是不同的:

代码语言:javascript
运行
复制
PS Home:\> ,'b' -match 'b'
b
PS Home:\> 'b' -match 'b'
True

因此,如果您有一个变量,其中您不确定它是否是一个数组,您可以强制它是一个:

代码语言:javascript
运行
复制
@($foo) -match 'b'

或者使用Where-Object来做正确的事情。

就我个人而言,在控制台上编写PowerShell代码时,我倾向于直接使用操作符。它还提供了一个很好的简洁的grep等效:

代码语言:javascript
运行
复制
(gc file) -match 'regex'

(不过,我确实应该开始更频繁地使用Select-String。)

但是,在编写需要健壮的脚本或其他人必须阅读/维护脚本时,我使用了Where-Object的“适当”方式。

票数 3
EN

Stack Overflow用户

发布于 2016-09-29 21:41:16

  • $array -match 'value' -直接检查每个值的字符串表示形式,这是非常快的(特别是在大型数组中)
  • $array | where { $_ -match 'value' } -对每个项执行scriptblock,因此:
    • 调用开销(在大型数组中很明显,它可以大大减慢处理速度)
    • 灵活性和复杂条件
    • 属性可以使用
    • 可以执行额外的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39780205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档