簡短描述
描述您可以用來立即結束 Foreach、For、While、Do 或 Switch 語句的語句。
詳細描述
當 Break 語句出現在迴圈中時(例如 Foreach、For 或 While 迴圈),Break 語句會導致 PowerShell 立即結束迴圈。 在交換器結構中,Break 會導致 PowerShell 結束 Switch 程式碼區塊。
Break 語句可以包含一個可讓您結束內嵌迴圈的標籤。 在腳本中,標籤可以指定任何迴圈關鍵字,例如 Foreach、For 或 While。
下列範例顯示如何使用 Break 語句來結束 For 語句:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
在此範例中,Break 語句會在 $i 變數等於1時結束 For 迴圈。 即使 For 語句評估為 True,直到 $i 大於10時,PowerShell 會在第一次執行 For 迴圈時到達 break 語句。
在必須符合內部條件的迴圈中使用 Break 語句更為常見。 請考慮下列 Foreach 語句範例:
$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
$i++
if ($val -eq 30) {
break
}
}
Write-Host "30 was found in array position $i"
在此範例中,Foreach 語句會逐一查看 $varB 陣列。 每次執行程式碼區塊時,$i 變數都會遞增1。 If 語句會在迴圈的前兩次執行時評估為 False。 第三次執行迴圈時,$i 等於3,而 $val 變數等於30。 此時,Break 語句會執行,而 Foreach 迴圈就會結束。
您可以用中斷 Foreach 迴圈的相同方式來中斷其他迴圈語句。 在下列範例中,Break 語句會在使用 Trap 語句來捕捉 DivideByZeroException 例外狀況時結束 While 語句。
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
Break 語句可以包含標籤。 如果您使用 Break 關鍵字搭配標籤,則 PowerShell 會結束標記的迴圈,而不是結束目前的迴圈。 標籤的語法如下所示(此範例顯示 While 迴圈中的標籤):
: myLabel while ( <condition> ) { <statement list> }
標籤是冒號,後面接著您指派的名稱。 標籤必須是語句中的第一個 token,而且後面必須接著迴圈關鍵字,例如 While。
在 PowerShell 中,只有迴圈關鍵字(例如 Foreach、For 和 While)可以有標籤。
Break 會從標記的迴圈移出執行。 在內嵌迴圈中,這與 Break 關鍵字本身使用時的結果不同。 此示意性範例具有 While 語句和 For 語句:
:myLabel while (<condition 1>) {
for ($item in $items) {
if (<condition 2>) {
break myLabel
}
$item = $x # A statement inside the For-loop
}
}
$a = $c # A statement after the labeled While-loop
如果條件2評估為 True,則腳本的執行會在標記的迴圈之後向下跳至語句。 在此範例中,會使用語句 "$a = $c" 再次開始執行。
您可以嵌套許多加上標籤的迴圈,如下列的示意性範例所示。
:red while (<condition1>) {
:yellow while (<condition2>) {
while (<condition3>) {
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
Write-Host "After innermost loop"
}
Write-Host "After yellow loop"
}
Write-Host "After red loop"
如果 $b 變數評估為 True,則腳本的執行會在標記為「紅色」的迴圈之後繼續。 如果 $c 變數評估為 True,腳本控制項會在標記為「黃色」的迴圈之後繼續執行。
如果 $a 變數評估為 True,則會在最內層的迴圈之後繼續執行。 不需要任何標籤。
PowerShell 不會限制標籤可以繼續執行的程度。 標籤甚至可以在腳本和函式呼叫界限之間傳遞控制權。
Break 關鍵字是用來離開 Switch 結構。 例如,下列 Switch 語句會使用 Break 語句來測試最特定的條件:
$var = "word2"
switch -regex ($var) {
"word2" {
Write-Host "Exact" $_
break
}
"word.*" {
Write-Host "Match on the prefix" $_
break
}
"w.*" {
Write-Host "Match on at least the first letter" $_
break
}
default {
Write-Host "No match" $_
break
}
}
在此範例中,會建立 $var 變數,並將其初始化為 "word2" 的字串值。 Switch 語句會使用 Regex 類別,先將變數值與 "word2" 詞彙進行比對。 (Regex 類別是正則運算式 Microsoft .NET Framework 類別)。因為 Switch 語句中的變數值和第一個測試相符,所以 Switch 語句中的第一個程式碼區塊會執行。
當 PowerShell 到達第一個 Break 語句時,Switch 語句會結束。 如果已從範例中移除四個 Break 語句,則會符合所有四個條件。 這個範例會使用 break 語句,以在符合最特定條件時顯示結果。