【问题标题】:Why does continue in ForEach-Object operate like break? [duplicate]为什么 ForEach-Object 中的 continue 像 break 一样运行? [复制]
【发布时间】:2012-04-07 18:41:06
【问题描述】:
$arr = @(1..10)
$arr | ForEach-Object {
    if ($_ -eq 5) { continue }
    "output $_"
}

结果:

输出 1 输出 2 输出 3 输出 4
$arr = @(1..10)
$arr | ForEach-Object {
    if ($_ -eq 5) { break }
    "output $_"
}

结果:

输出 1 输出 2 输出 3 输出 4

为什么?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    因为continuebreak 用于循环,而foreach-object 是一个cmdlet。这种行为并不是你所期望的,因为它只是停止了整个脚本(在原始代码之后添加一个语句,你会看到那个语句没有运行)

    要获得与 foreach 循环中使用 continue 类似的效果,您可以使用 return

    $arr = @(1..10)
    $arr | ForEach-Object {
        if ($_ -eq 5){ return}
        "output $_"
    }
    

    【讨论】:

      【解决方案2】:

      这是因为 continue 应用于 foreach 循环($collection 中的 foreach $item)而不是 foreach-object cmdlet。试试这个:

      $arr = @(1..10)
      $arr | ForEach-Object {
          if ($_ -eq 5){ return}
          "output $_"
      }
      

      还有这个:

      $arr = @(1..10)
       ForEach ($i in $arr) {
          if ($i -eq 5){ continue}
          "output $i"
      }
      

      【讨论】:

        猜你喜欢
        • 2011-05-25
        • 2015-12-09
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 2019-12-08
        相关资源
        最近更新 更多