about_Break

Krátký popis

Popisuje break příkaz, který poskytuje způsob, jak ukončit aktuální řídicí blok.

Dlouhý popis

Příkaz break poskytuje způsob, jak ukončit aktuální řídicí blok. Provádění pokračuje po dalším příkazu za řídicím blokem. Příkaz podporuje popisky. Popisek je název, který přiřadíte k příkazu ve skriptu.

Použití break ve smyčce

Když se break příkaz zobrazí ve smyčce, jako foreachje například , for, donebo while smyčka, PowerShell okamžitě ukončí smyčku.

Příkaz break může obsahovat popisek, který umožňuje ukončit vložené smyčky. Popisek může zadat libovolné klíčové slovo smyčky, například foreach, fornebo while, ve skriptu.

Následující příklad ukazuje, jak pomocí break příkazu ukončit for příkaz:

for($i=1; $i -le 10; $i++) {
   Write-Host $i
   break
}

V tomto příkladu příkaz break ukončí smyčku for , když $i se proměnná rovná 1. I když se for příkaz vyhodnotí jako True , dokud $i není větší než 10, PowerShell dosáhne příkazu break při prvním for spuštění smyčky.

Běžnější je použít break příkaz ve smyčce, kde musí být splněna vnitřní podmínka. Představte si následující foreach příklad příkazu:

$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
  if ($val -eq 30) {
    break
  }
  $i++
}
Write-Host "30 was found in array index $i"

V tomto příkladu foreach příkaz iteruje $varB pole. Příkaz if se vyhodnotí jako False, první dvakrát se smyčka spustí a proměnná $i se zvýší o 1. Třetí čas spuštění smyčky, $i rovná se 2 a $val proměnná se rovná 30. V tomto okamžiku se break příkaz spustí a smyčka foreach se ukončí.

Použití popisku break ve smyčce

Příkaz break může obsahovat popisek. Pokud použijete break klíčové slovo s popiskem, PowerShell ukončí označenou smyčku místo ukončení aktuální smyčky. Popisek je dvojtečka následovaná názvem, který přiřadíte. Popisek musí být prvním tokenem v příkazu a musí následovat klíčové slovo smyčky, například while.

break přesune provádění mimo označenou smyčku. Ve vložených smyček má tento výsledek jiný výsledek, než má klíčové slovo, když ho break používá sám. Tento příklad obsahuje while příkaz s příkazem 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

Pokud se podmínka 2 vyhodnotí jako Pravda, spuštění skriptu přeskočí na příkaz za označenou smyčkou. V příkladu spuštění znovu spustí příkaz $a = $c.

Můžete vnořit mnoho označených smyček, jak je znázorněno v následujícím příkladu.

: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"

Pokud se $b proměnná vyhodnotí jako True, spuštění skriptu se obnoví po smyčce označené jako "červená". Pokud se $c proměnná vyhodnotí jako True, spuštění ovládacího prvku skriptu se obnoví po smyčce označené jako žlutá.

Pokud se $a proměnná vyhodnotí jako True, provádění se obnoví po vnitřní smyčce. Není potřeba žádný popisek.

PowerShell neomezuje, jak daleko popisky můžou pokračovat v provádění. Popisek může dokonce předat řízení napříč hranicemi volání skriptu a funkce.

Použití break v switch příkazu

V konstruktoru switchzpůsobí, break že PowerShell ukončí switch blok kódu.

Klíčové break slovo se používá k opuštění konstruktoru switch . Následující příkaz například switch používá break příkazy k otestování pro nejvýraznější podmínku:

$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
    }
}

V tomto příkladu $var se proměnná vytvoří a inicializuje na řetězcovou hodnotu word2. Příkaz switch používá regex třídy, aby se nejprve shodovat s proměnnou hodnotu s termínem word2. Vzhledem k tomu, že hodnota proměnné a první test v switch příkazu odpovídají, spustí se první blok kódu v switch příkazu.

Když PowerShell dosáhne prvního break příkazu, switch příkaz se ukončí. Pokud jsou ze příkladu odebrány čtyři break příkazy, jsou splněny všechny čtyři podmínky. Tento příklad používá příkaz break k zobrazení výsledků, když je splněna nejvýraznější podmínka.

Použití break v trap příkazu

Pokud je konečný příkaz proveden v těle trap příkazu je break, je potlačeno objekt chyby a výjimka je znovu vyvolána.

Následující příklad vytvoří výjimku DivideByZeroException , která je zachycena pomocí trap příkazu.

function test {
  trap [DivideByZeroException] {
    Write-Host 'divide by zero trapped'
    break
  }

  $i = 3
  'Before loop'
  while ($true) {
     "1 / $i = " + (1 / $i--)
  }
  'After loop'
}
test

Všimněte si, že provádění se zastaví na výjimce. Nikdy After loop se nedosáhl. Po provedení se výjimka znovu vyvolá trap .

Before loop
1 / 3 = 0.333333333333333
1 / 2 = 0.5
1 / 1 = 1
divide by zero trapped
ParentContainsErrorRecordException:
Line |
  10 |       "1 / $i = " + (1 / $i--)
     |       ~~~~~~~~~~~~~~~~~~~~~~~~
     | Attempted to divide by zero.

Nepoužívejte break mimo smyčku nebo switchtrap

Pokud break se používá mimo konstruktor, který ho přímo podporuje (smyčky, switch, trap), PowerShell vyhledá zásobník volání pro uzavřený konstruktor. Pokud nemůže najít uzavřený konstruktor, aktuální runspace se tiše ukončí.

To znamená, že funkce a skripty, které neúmyslně používají break vnější konstruktor, který ji podporuje, může neúmyslně ukončit své volající.

Použití break uvnitř kanálu break, například ForEach-Object bloku skriptu, nejen ukončení kanálu, potenciálně ukončí celý runspace.

Viz také