Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
A break utasítást ismerteti, amely lehetővé teszi az aktuális vezérlőblokkból való kilépést.
Hosszú leírás
A break utasítással kiléphet az aktuális vezérlőblokkból.
A végrehajtás a következő utasításnál folytatódik a vezérlőblokk után. Az utasítás támogatja a címkéket. A címke egy szkriptben lévő utasításhoz hozzárendelt név.
Ciklusok használata break
Amikor egy break utasítás megjelenik egy ciklusban, például egy foreach, for, dovagy while ciklusban, a PowerShell azonnal kilép a hurokból.
A break utasítás tartalmazhat olyan címkét, amely lehetővé teszi a beágyazott hurkokból való kilépést. A címkék bármilyen ciklus kulcsszót megadhatnak, például foreach, forvagy whileegy szkriptben.
Az alábbi példa bemutatja, hogyan lehet break utasítással kilépni egy for utasításból:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
Ebben a példában a break utasítás kilép a for ciklusból, amikor a $i változó értéke 1. Annak ellenére, hogy az for utasítás értéke True (Igaz ) lesz, amíg $i 10-nél nagyobb nem lesz, a PowerShell a ciklus első futtatásakor eléri a for törési utasítást.
Gyakrabban használják a break utasítást olyan hurokban, amelyben belső feltételnek kell teljesülnie. Tekintse meg a következő foreach utasítást:
$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"
Ebben a példában a foreach utasítás iterálja a $varB tömböt. A if utasítás a ciklus első két futtatásakor hamis értéket ad vissza, a $i változó pedig 1-zel növekszik. A ciklus harmadik futtatásakor $i 2, a $val változó pedig 30. Ekkor fut a break utasítás, és a foreach ciklus kilép.
Címkézett break használata hurokban
Egy break utasítás tartalmazhat címkét. Ha a break kulcsszót címkével használja, a PowerShell az aktuális ciklusból való kilépés helyett kilép a címkézett hurokból.
A címke egy kettőspont, amelyet egy hozzárendelt név követ. A címkének egy utasítás első tokenjének kell lennie, amelyet a ciklus kulcsszónak kell követnie, például while.
break áthelyezi a végrehajtást a címkézett hurokból. A beágyazott hurkokban ez más eredményt ad, mint a break kulcsszó, amikor önmagában használja. Ebben a példában egy while utasítást tartalmazó for utasítás látható:
:myLabel while (<condition 1>) {
foreach ($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
Ha a 2. feltétel értéke Igaz, a szkript végrehajtása a címkézett hurok után az utasításra ugrik. A példában a végrehajtás a $a = $cutasítással kezdődik.
A következő példában látható módon számos címkézett hurkot ágyazhat be.
: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"
Ha a $b változó értéke Igaz, a szkript végrehajtása a "piros" címkével ellátott ciklus után folytatódik. Ha a $c változó értéke Igaz, a szkriptvezérlő végrehajtása a "sárga" címkével ellátott ciklus után folytatódik.
Ha a $a változó értéke Igaz, a végrehajtás a legbelső hurok után folytatódik. Nincs szükség címkére.
A PowerShell nem korlátozza, hogy a címkék milyen mértékben folytathatják a végrehajtást. A címke még a szkriptek és függvényhívások határán is át tudja adni a vezérlést.
Használat break utasításban switch
switch Egy szerkezetben a break PowerShell kilép a switch kódblokkból.
A break kulcsszó a switch szerkezet elhagyására szolgál. Az alábbi switch utasítás például break utasításokkal teszteli a legspecifikusabb feltételt:
$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
}
}
Ebben a példában a $var változó létrejön és inicializálódik egy word2sztringértékre. Az switch utasítás a Regex osztályt használja a változó értékének először a kifejezéssel word2való egyeztetéséhez. Mivel a változó értéke és a switch utasítás első tesztje egyezik, a switch utasítás első kódblokkja fut.
Amikor a PowerShell eléri az első break utasítást, a switch utasítás kilép. Ha a négy break utasítás el lesz távolítva a példából, mind a négy feltétel teljesül. Ez a példa a break utasítást használja az eredmények megjelenítésére, ha a legspecifikusabb feltétel teljesül.
Használat break utasításban trap
Ha egy trap utasítás törzsében végrehajtott végső utasítás break, a hibaobjektum el lesz tiltva, és a kivétel újra lesz vetve.
Az alábbi példa létrehoz egy DivideByZeroException kivételt, amely az trap utasítás használatával csapdába esik.
function test {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
$i = 3
'Before loop'
while ($true) {
"1 / $i = " + (1 / $i--)
}
'After loop'
}
test
Figyelje meg, hogy a végrehajtás a kivételnél leáll. A After loop soha nem érik el. A kivétel a trap végrehajtása után lesz újra eldobva.
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.
Ne használjon break hurkon kívül, switchvagy trap
Ha break közvetlenül támogató szerkezeten (hurkok, switch, trap) kívül van használva, a PowerShell a hívásverem egy belefoglaló szerkezethez. Ha nem talál belefoglaló szerkezetet, az aktuális futtatótér csendesen leáll.
Ez azt jelenti, hogy azok a függvények és szkriptek, amelyek véletlenül egy break külső szerkezetet használnak, amely támogatja azt, véletlenül leállíthatják a hívóikat.
Ha egy folyamaton breakbelül (például egy ForEach-Object szkriptblokkon) belül használjabreak, nem csak kilép a folyamatból, hanem a teljes futtatókörnyezetet is leállítja.