簡短描述
描述您可以用來立即結束 Foreach、For、While、Do 或 Switch 語句的語句。
詳細描述
當 Break 語句出現在迴圈中時,例如 Foreach、For 或 While 循環時,Break 語句會讓 PowerShell 立即結束迴圈。 在 Switch 建構中,Break 會導致 PowerShell 結束 Switch 程式代碼區塊。
Break 語句可以包含可讓您結束內嵌迴圈的標籤。 卷標可以在腳本中指定任何循環關鍵詞,例如 Foreach、For 或 While。
下列範例示範如何使用 Break 語句結束 For 語句:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
在此範例中,當 $i 變數等於 1 時,Break 語句會結束 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>
}
卷標是冒號,後面接著您指派的名稱。 卷標必須是 語句中的第一個標記,而且後面必須接著迴圈關鍵詞,例如 While。
在 PowerShell 中,只有循環關鍵詞,例如 Foreach、For 和 While 可以有標籤。
中斷會將執行移出標籤的迴圈。 在內嵌迴圈中,這與 Break 關鍵詞本身使用時的結果不同。 此圖解範例具有具有 For 語句的 While 語句:
: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 class.) 正則表示式,因為 Switch 語句中的變數值和第一個測試相符,所以 Switch 語句中的第一個程式代碼區塊會執行。
當 PowerShell 到達第一個 Break 語句時,Switch 語句就會結束。 如果從範例中移除四個 Break 語句,則符合所有四個條件。 這個範例會使用 break 語句,在符合最特定的條件時顯示結果。