about_Continue
Descrição breve
Descreve como a continue
instrução retorna imediatamente o fluxo do programa para a parte superior de um loop de programa, uma switch
instrução ou uma trap
instrução.
Descrição longa
A continue
instrução fornece uma maneira de sair do bloco de controle atual, mas continuar a execução, em vez de sair completamente. A instrução suporta rótulos.
Um rótulo é um nome que você atribui a uma instrução em um script.
Usando continuar em loops
Uma instrução sem rótulo continue
retorna imediatamente o fluxo do programa para a parte superior do loop mais interno que é controlado por uma for
instrução , foreach
do
, ou while
. A iteração atual do loop é encerrada e o loop continua com a próxima iteração.
No exemplo a seguir, o fluxo do programa retorna à parte superior do while
loop se a $ctr
variável for igual a 5. Como resultado, todos os números entre 1 e 10 são exibidos, exceto 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
Ao usar um for
loop, a <Repeat>
execução continua na instrução, seguida pelo <Condition>
teste. No exemplo abaixo, um loop infinito não ocorrerá porque o decremento de $i
ocorre após a continue
palavra-chave.
# <Init> <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
Write-Host -Object $i
if ($i -eq 5)
{
continue
# Will not result in an infinite loop.
$i--
}
}
Usando um continuar rotulado em um loop
Uma instrução rotulada encerra a execução da iteração e transfere continue
o controle para a iteração de inclusão ou switch
rótulo de instrução de destino.
No exemplo a seguir, o mais for
interno é encerrado quando $condition
é True e a iteração continua com o segundo for
loop em labelB
.
:labelA for ($i = 1; $i -le 10; $i++) {
:labelB for ($j = 1; $j -le 10; $j++) {
:labelC for ($k = 1; $k -le 10; $k++) {
if ($condition) {
continue labelB
} else {
$condition = Update-Condition
}
}
}
}
Usando continuar em uma instrução switch
Uma instrução sem rótulo continue
dentro de um switch
encerra a execução da iteração atual switch
e transfere o controle para a parte superior do switch
para obter o próximo item de entrada.
Quando há um único item continue
de entrada, sai a instrução inteira switch
.
Quando a switch
entrada é uma coleção, o testa switch
cada elemento da coleção. O continue
sai da iteração atual e o switch
continua com o próximo elemento.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Usando continuar em uma instrução de interceptação
Se a instrução final executada no corpo uma trap
instrução é continue
, o erro preso é silenciosamente ignorado e a execução continua com a instrução imediatamente após a que causou trap
a ocorrência.
Não use continuar fora de um loop, switch ou trap
Quando continue
é usado fora de uma construção que a suporta diretamente (loops, switch
, trap
), o PowerShell procura na pilha de chamadas uma construção de delimitação. Se ele não conseguir encontrar uma construção de delimitação, o espaço de execução atual será encerrado silenciosamente.
Isso significa que funções e scripts que inadvertidamente usam um continue
fora de uma construção de fechamento que o suporta, podem encerrar inadvertidamente seus chamadores.
O uso continue
dentro de um pipeline, como um bloco de ForEach-Object
script, não apenas sai do pipeline, mas potencialmente encerra todo o espaço de execução.