簡短描述
描述 continue 語句如何立即將程式流程傳回至程序循環頂端、switch 語句或 trap 語句。
完整描述
continue 語句提供一種方式來結束目前的控制區塊,但繼續執行,而不是完全結束。 陳述支持標籤。
標籤是您指派給文稿中語句的名稱。
在迴圈中使用繼續
未標記的 continue 語句會立即將程式流程傳回由 for、foreach、do或 while 語句所控制的最內部迴圈頂端。 迴圈目前的反覆專案會終止,迴圈會繼續進行下一個反覆專案。
在下列範例中,如果 while 變數等於5,則程式流程會傳回 $ctr 迴圈頂端。 因此,除了5之外,會顯示介於1到10之間的所有數位:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
使用 for 迴圈時,執行會繼續在 <Repeat> 敘述,然後進行 <Condition> 測試。 在下列範例中,不會發生無限循環,因為遞減 $i 會在 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--
}
}
在迴圈中使用標記的 continue
加上標籤的 continue 語句會終止反覆運算的執行,並將控制權傳輸到目標封入反覆運算或 switch 語句標籤。
在以下範例中,當 for$condition 時,最內層的 會被終止,而在 for處,反覆運算會接續執行第二個 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
}
}
}
}
在 switch 語句中使用 continue
continue 內未標記的 switch 語句會終止目前 switch 迭代的執行,並將控制權傳遞至 switch 頂端,以獲取下一個輸入項目。
當單一輸入項目 continue 退出整個 switch 語句時。
當 switch 輸入是集合時,switch 會測試集合的每個元素。
continue 會結束目前的反覆專案,而 switch 會繼續下一個專案。
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
在陷阱語句中使用「continue」
如果在主體中執行的最後一個語句是 trap 語句 continue,則被截獲的錯誤將被靜默忽略,並將從導致 trap 發生的語句之後的下一條語句開始繼續執行。
請勿在迴圈、switch 或 trap 之外使用 continue
在直接支援它的建構外部使用 continue 時(迴圈、switch、trap),PowerShell 會 封入建構的呼叫堆疊。 如果找不到封入建構,則目前的 Runspace 會悄悄終止。
這意味著,如果函式和腳本不小心在不支援它的封閉結構外部使用 continue,可能會不小心終止它們的 呼叫者。
在管線內使用 continue,例如 ForEach-Object 腳本區塊,不僅會結束管線,還可能會終止整個執行空間。