关于 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 语句在满足最具体条件时显示结果。

另请参阅

about_Comparison_Operators

about_Continue

about_For

关于 Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While