Почему continue в ForEach-Object работает как break? [Дубликат]

На этот вопрос уже есть ответ здесь:

Почему продолжение ведет себя как разрыв в объекте Foreach? 4 ответа
$arr = @(1..10)
$arr | ForEach-Object {
    if ($_ -eq 5) { continue }
    "output $_"
}

Результат:

output 1
output 2
output 3
output 4
$arr = @(1..10)
$arr | ForEach-Object {
    if ($_ -eq 5) { break }
    "output $_"
}

Результат:

output 1
output 2
output 3
output 4

Почему?

Ответы на вопрос(2)

что continue применяется к циклу foreach (foreach $ item в $ collection), а не к командлету foreach-object. попробуй это:

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

и это:

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

continue а такжеbreak предназначены для петель иforeach-object это командлет Поведение не совсем то, что вы ожидаете, потому что это просто остановка всего скрипта (добавьте оператор после исходного кода, и вы увидите, что этот оператор не выполняется)

Чтобы получить эффект, аналогичный тому, который продолжает использоваться в цикле foreach, вы можете использоватьreturn:

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

Ваш ответ на вопрос