Powershell:“中断”似乎结束了整个程序,而不仅仅是循环?

vik*_*ata 1 powershell pipeline break

我有这个脚本:

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

"hello"
Run Code Online (Sandbox Code Playgroud)

我期望从1到10,在遇到3时会显示“哇”,最后显示“你好”,但实际输出是:

1
2
3
kkk
Run Code Online (Sandbox Code Playgroud)

因此,“ break”似乎没有破坏管道中的%{}循环,而是破坏了整个程序?如何在继续执行后续语句的同时中断循环?

谢谢。

Var*_*ina 6

ForEach-Objectforeach循环是不同的。如果使用后者,则所有功能均应按预期工作。

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

"hello"
Run Code Online (Sandbox Code Playgroud)

输出将是

1
2
3
wow
hello
Run Code Online (Sandbox Code Playgroud)

UPD:您可以在此处阅读有关这些差异的一些有用信息。需要注意的主要Foreach-Object是将集成到管道中,它基本上是process内部带有块的函数。该foreach是一个语句。自然,break可以表现不同。