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 foreach
je například , for
, do
nebo 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
, for
nebo 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 switch
způ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 switch
trap
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.