Powershell:"休息"似乎结束整个程序,而不只是一个循环?

时间:2015-06-10 09:11:45

标签: powershell break pipeline

我有这个脚本:

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

"hello"

我希望从1到10,当遇到3时它打印"哇",最后"你好" 但实际输出是:

1
2
3
kkk

所以"休息"似乎打破了管道中的%{}循环,但打破了整个程序?如何在循环中中断,同时继续执行后面的语句?

谢谢。

1 个答案:

答案 0 :(得分:5)

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的行为可能不同。