about_Break
主題
about_Break
簡短描述
描述可用來立即結束 Foreach、For、While、Do 或 Switch 陳述式的陳述式。
完整描述
當 Break 陳述式出現在迴圈 (如 Foreach、For、Switch 或 While) 中的時候,Break
陳述式會讓 Windows PowerShell 立即結束迴圈。在不執行迴圈的 Switch 建構中,
Break 會讓 Windows PowerShell 結束 Switch 程式碼區塊。
Break 陳述式可以包含能結束內嵌迴圈的標籤。標籤可以在指令碼中指定任何迴圈關鍵
字,例如 Foreach、For 或 While。當您使用標籤時,Break 就會結束指定的迴圈。不
管 Break 陳述式所在的迴圈為何,Break 一律會結束指定的迴圈。
在下列範例中,會示範如何使用 Break 陳述式結束 For 陳述式:
for($i=1; $i -le 10; $i++)
{
Write-Host $i
break
}
在這個範例中,只要 $i 變數等於 1,Break 陳述式隨即結束 For 迴圈。儘管 For 陳
述式評估為 True 的條件是 $i 大於 10,但 Windows 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 迴圈一樣。在下列範例中,當使用
Trap 陳述式截獲 DivideByZeroException 例外狀況時,Break 陳述式就會結束
While 陳述式。
$i = 3
while ($true)
{
trap [DivideByZeroException]
{
Write-Host "divide by zero trapped" break
}
1 / $i--
}
Break 陳述式可以包含標籤。如果搭配標籤使用 Break 關鍵字,Windows PowerShell
會結束有標籤的迴圈,而不是結束目前的迴圈。標籤的語法如下 (這個範例示範 While 迴
圈中的標籤):
:myLabel while (<條件>) { <陳述式清單>}
冒號後面加上指派的名稱即代表標籤。標籤必須是陳述式中的第一個語彙基元,而且後面
必須接著迴圈關鍵字,例如 While。
在 Windows PowerShell 中只有迴圈關鍵字 (如 Foreach、For 和 While) 才能有
標籤。
Break 會讓執行跳離有標籤的迴圈。在有標籤的迴圈中,這個結果與 Break 關鍵字單獨
使用的結果並不相同。下列是一個有 For 陳述式的 While 陳述式的概略範例:
:myLabel while (<條件 1>)
{
for ($item in $items)
{
if (<條件 2>) { break myLabel }
$item = $x # For 迴圈內的陳述式 }
}
$a = $c # 有標籤的 While 迴圈之後的陳述式
如果條件 2 評估為 True,指令碼的執行會跳至有標籤的迴圈之後的陳述式。在這個範例
中,會再次從 "$a = $c" 陳述式開始執行。
您可以將許多有標籤的迴圈巢狀化,如下列概略範例所示:
:red while (<條件1>)
{
:yellow while (<條件2>)
{
while (<條件3>)
{
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
# 在最內層迴圈之後
}
# 在 \\"yellow\\" 迴圈之後
}
# 在 \\"red\\" 迴圈之後
如果 $b 變數評估為 True,指令碼的執行會在標籤為 "red" 的迴圈之後繼續。如果 $c
變數評估為 True,指令碼控制的執行會在標籤為 "yellow" 的迴圈之後繼續。
如果 $a 變數評估為 True,指令碼的執行會在最內層迴圈之後繼續。因此,不需要用到
任何標籤。
Windows 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 陳述式中的第一個程式碼區塊便會執行。
當 Windows PowerShell 到達第一個 Break 陳述式時,Switch 陳述式就會結束。如
果將這個範例中的四個 Break 陳述式全部移除,所有四個條件都會符合。這個範例會在
最明確的條件符合時使用 Break 陳述式顯示結果。
請參閱
about_Comparison_Operators
about_For
about_Foreach
about_Switch
about_While