我有这个脚本:

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

"hello"

我期望从1到10,在遇到3时会显示“哇”,最后显示“你好”
但是实际输出是:
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的行为可能有所不同。

关于powershell - Powershell: “break”似乎结束了整个程序,而不仅仅是循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30752010/

10-13 07:56