about_Continue
Descrizione breve
Descrive come l'istruzione continue
restituisce immediatamente il flusso del programma all'inizio di un ciclo di programma, un'istruzione switch
o un'istruzione trap
.
Descrizione lunga
L'istruzione continue
consente di uscire dal blocco di controllo corrente, ma continuare l'esecuzione anziché uscire completamente. L'istruzione supporta le etichette.
Un'etichetta è un nome assegnato a un'istruzione in uno script.
Uso dei cicli continue in
Un'istruzione senza etichetta continue
restituisce immediatamente il flusso del programma all'inizio del ciclo più interno controllato da un'istruzione for
, foreach
do
, o while
. L'iterazione corrente del ciclo viene terminata e il ciclo continua con l'iterazione successiva.
Nell'esempio seguente il flusso del programma torna all'inizio del while
ciclo se la $ctr
variabile è uguale a 5. Di conseguenza, vengono visualizzati tutti i numeri compresi tra 1 e 10, ad eccezione di 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
Quando si usa un for
ciclo, l'esecuzione continua con l'istruzione <Repeat>
, seguita dal <Condition>
test. Nell'esempio seguente, non si verificherà un ciclo infinito perché il decremento di $i
si verifica dopo la continue
parola chiave .
# <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--
}
}
Uso di un'etichetta continua in un ciclo
Un'istruzione etichettata continue
termina l'esecuzione dell'iterazione e trasferisce il controllo all'etichetta di iterazione o switch
istruzione di inclusione di destinazione.
Nell'esempio seguente, l'elemento più for
interno viene terminato quando $condition
è True e l'iterazione continua con il secondo for
ciclo in .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
}
}
}
}
Uso di continue in un'istruzione switch
continue
Un'istruzione senza etichetta all'interno di un switch
termina l'esecuzione dell'iterazione corrente switch
e trasferisce il controllo all'inizio di per ottenere l'elemento di switch
input successivo.
Quando è presente un singolo elemento continue
di input esce dall'intera switch
istruzione.
Quando l'input switch
è una raccolta, verifica switch
ogni elemento della raccolta. Esce continue
dall'iterazione corrente e continua switch
con l'elemento successivo.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Uso di continue in un'istruzione trap
Se l'istruzione finale eseguita nel corpo di un'istruzione trap
è continue
, l'errore intrappolato viene ignorato automaticamente e l'esecuzione continua con l'istruzione immediatamente successiva a quella che ha trap
causato l'esecuzione.
Non usare continuare all'esterno di un ciclo, di un interruttore o di un trap
Quando continue
viene usato all'esterno di un costrutto che lo supporta direttamente (cicli, switch
, trap
), PowerShell cerca lo stack di chiamate per un costrutto di inclusione. Se non riesce a trovare un costrutto di inclusione, lo spazio di esecuzione corrente viene terminato in modalità non interattiva.
Ciò significa che funzioni e script che usano inavvertitamente un continue
costrutto esterno a un costrutto di inclusione che lo supporta, può terminare inavvertitamente i chiamanti.
L'uso continue
all'interno di una pipeline, ad esempio un ForEach-Object
blocco di script, non solo esce dalla pipeline, termina potenzialmente l'intero spazio di esecuzione.