Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Breve descrizione
Viene descritto 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. La dichiarazione supporta le etichette.
Un'etichetta è un nome assegnato a un'istruzione in uno script.
Uso del comando "continue" nei cicli
Un'istruzione continue senza etichetta restituisce immediatamente il flusso del programma all'inizio del ciclo più interno controllato da un'istruzione for, foreach, doo 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 ciclo while se la variabile $ctr è 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 ciclo di for, l'esecuzione continua con l'istruzione <Repeat>, seguita dal test <Condition>. Nell'esempio seguente, non si verificherà un ciclo infinito perché il decremento di $i si verifica dopo la parola chiave continue.
# <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 interrompe l'esecuzione del ciclo e trasferisce il controllo all'etichetta dell'iterazione racchiudente di destinazione o all'etichetta dell'istruzione switch.
Nell'esempio seguente, il for più interno viene terminato quando $condition è True e l'iterazione continua con il secondo ciclo di for 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
Un'istruzione continue senza etichetta all'interno di un switch termina l'esecuzione dell'iterazione corrente switch e trasferisce il controllo all'inizio del switch per ottenere l'elemento di input successivo.
Quando è presente un singolo elemento di input continue esce dall'intera istruzione switch.
Quando l'input switch è una raccolta, il switch verifica ogni elemento della raccolta. Il continue esce dall'iterazione corrente e il switch continua con l'elemento successivo.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Uso di continue in una 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 causato trap verificarsi.
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 nello stack di chiamate per un costrutto contenitore. Se non riesce a trovare un costrutto circostante, lo spazio di esecuzione corrente viene terminato senza notifiche.
Ciò significa che funzioni e script che usano inavvertitamente un continue all'esterno di un costrutto di inclusione che lo supporta, possono terminare inavvertitamente i chiamanti .
L'uso di continue all'interno di una pipeline, ad esempio un blocco di script ForEach-Object, non solo esce dalla pipeline, termina potenzialmente l'intero spazio di esecuzione.