共用方式為


關於 Break

簡短描述

描述可用於立即退出 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,直到 Blade 大於 $i,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 關鍵字與標籤一起使用,則 PowerShell 將退出帶標籤的迴圈,而不是退出當前迴圈。 標籤的語法如下(此範例顯示了 While 循環中的標籤):

:myLabel while ()<condition> { <statement list>}

卷標是冒號,後面接著您指派的名稱。 標籤必須是語句中的第一個標記,並且必須後跟循環關鍵字,例如 While。

在 PowerShell 中,只有循環關鍵字(如 Foreach、For 和 While)可以具有標籤。

Break 將執行移出 labeled 迴圈。 在嵌入式迴圈中,這與 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,則腳本的執行將在標記為 “red” 的循環後繼續執行。 如果 $c 變數的計算結果為 True,則腳本控件的執行將在標記為“yellow”的循環後繼續執行。

如果 $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 語句在滿足最具體條件時顯示結果。

另請參閱

關於_比較_運算符

關於_繼續

關於

關於_Foreach

關於 Switch

about_Throw

關於_陷阱

關於_嘗試_捕捉_最後

about_While