为什么在ForEach-Object中继续运行就像break一样?

Coo*_*.Wu 8 powershell

$arr = @(1..10)
$arr | ForEach-Object {
    if ($_ -eq 5) { continue }
    "output $_"
}
Run Code Online (Sandbox Code Playgroud)

结果:

output 1
output 2
output 3
output 4

$arr = @(1..10)
$arr | ForEach-Object {
    if ($_ -eq 5) { break }
    "output $_"
}
Run Code Online (Sandbox Code Playgroud)

结果:

output 1
output 2
output 3
output 4

为什么?

man*_*lds 17

因为continue并且break是用于循环并且foreach-object是cmdlet.行为并不是您所期望的,因为它只是停止整个脚本(在原始代码之后添加一个语句,您将看到该语句不会运行)

要获得与foreach循环中使用的继续相似的效果,您可以使用return:

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


CB.*_*CB. 6

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

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

还有这个:

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