Powershell:"break" 似乎结束了整个程序,而不仅仅是一个循环?

Powershell: "break" seems to end whole program, not just a loop?

我有这个脚本:

1..10|%{
    $_
    if(($_ % 3) -eq 0)
    {
     "wow"
     break
    }
}

"hello"

我预计从 1 到 10,当遇到 3 时它打印 "wow",最后 "hello" 但实际输出是:

1
2
3
kkk

那么 "break" 似乎不是破坏了管道中的 %{} 循环,而是破坏了整个程序?我怎样才能打破循环,同时继续执行后面的语句?

谢谢。

ForEach-Objectforeach循环不同。如果您使用后者,一切都会如您所愿。

foreach ($n in (1..10)){
    $n
    if(($n % 3) -eq 0)
    {
     "wow";
     break;
    }
}

"hello"

输出将是

1
2
3
wow
hello

UPD:您可以阅读一些有关差异的有用信息 here。主要要注意的是 Foreach-Object 被集成到管道中,它基本上是一个函数,里面有 process 块。 foreach 是一个语句。当然,break 可以有不同的表现。