about_Break

Kısa açıklama

Geçerli denetim bloğundan break çıkmak için bir yol sağlayan deyimini açıklar.

Uzun açıklama

deyimi break geçerli denetim bloğundan çıkmak için bir yol sağlar. Yürütme, denetim bloğundan sonraki deyimde devam eder. deyimi etiketleri destekler. Etiket, betikteki bir deyime atadığınız addır.

Döngüler içinde kullanma break

break Bir deyimi , for, doveya while döngüsü gibi bir foreachdöngüde göründüğünde, PowerShell döngüden hemen çıkar.

Deyimi break , eklenmiş döngülerden çıkmanıza olanak tanıyan bir etiket içerebilir. Bir etiket, bir betikte , forveya whilegibi foreachherhangi bir döngü anahtar sözcüğünü belirtebilir.

Aşağıdaki örnekte deyimden çıkmak for için deyiminin break nasıl kullanılacağı gösterilmektedir:

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

Bu örnekte, break değişkeni 1'e eşit olduğunda deyimi döngüden $i çıkarfor. Deyimi 10'dan büyük olana kadar $i True olarak değerlendirilse forde, döngü ilk kez çalıştırıldığında PowerShell kesme deyimine for ulaşır.

deyimini iç koşulun break karşılanması gereken bir döngüde kullanmak daha yaygındır. Aşağıdaki foreach deyim örneğini göz önünde bulundurun:

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

Bu örnekte deyimi diziyi foreach$varB yineler. deyimi if , döngünün ilk iki kez çalıştırıldığında False olarak değerlendirilir ve değişken $i 1 artırılır. Döngü üçüncü kez çalıştırıldığında, $i 2'ye eşittir ve $val değişken 30'a eşittir. Bu noktada deyimi çalıştırılır break ve foreach döngü çıkar.

Döngüde etiketlenmiş break bir kullanma

Deyim break bir etiket içerebilir. Anahtar sözcüğünü break bir etiketle kullanırsanız, PowerShell geçerli döngüden çıkmak yerine etiketlenmiş döngüden çıkar. Etiket, iki nokta üst üste ve ardından atadığınız bir addır. Etiket bir deyimdeki ilk belirteç olmalı ve bunu gibi döngü anahtar sözcüğü whiletakip etmelidir.

break yürütmeyi etiketlenmiş döngünün dışına taşır. Katıştırılmış döngülerde bu, anahtar sözcüğün break kendisi tarafından kullanıldığında elde edilenden farklı bir sonuca sahiptir. Bu örnekte deyimi olan bir for deyimi vardırwhile:

: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

Koşul 2 True olarak değerlendirilirse, betiğin yürütülmesi etiketli döngüden sonra deyimine atlar. Örnekte, yürütme deyimiyle $a = $cyeniden başlar.

Aşağıdaki örnekte gösterildiği gibi birçok etiketli döngünün iç içe yerleştirebilirsiniz.

: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 Değişken True olarak değerlendirilirse, betiğin yürütülmesi "kırmızı" etiketli döngüden sonra devam eder. $c Değişken True olarak değerlendirilirse, betik denetiminin yürütülmesi "sarı" etiketli döngüden sonra devam eder.

$a Değişken True olarak değerlendirilirse, yürütme en içteki döngüden sonra devam eder. Etiket gerekmez.

PowerShell, etiketlerin yürütmeyi ne kadar sürdürebileceğini sınırlamaz. Etiket, denetimi betik ve işlev çağrısı sınırları arasında bile geçirebilir.

Deyiminde switch kullanma break

Bir switchyapıda PowerShell'in break kod bloğundan switch çıkmasına neden olur.

anahtar break sözcüğü, yapısından switch ayrılmak için kullanılır. Örneğin, aşağıdaki switch deyim, en belirli koşulu test etmek için deyimleri kullanır 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
    }
}

Bu örnekte $var değişkeni oluşturulur ve dize değerine word2başlatılır. deyimi, switch değişken değerini ilk olarak terimiyle word2eşleştirmek için Regex sınıfını kullanır. Değişken değeri ve deyimindeki switch ilk test eşleştiğinden, deyimindeki switch ilk kod bloğu çalışır.

PowerShell ilk break deyime ulaştığında deyiminden switch çıkar. Dört break deyim örnekten kaldırılırsa, dört koşulun tümü yerine getirilir. Bu örnek, break en belirli koşul karşılandığında sonuçları görüntülemek için deyimini kullanır.

Deyiminde trap kullanma break

Deyiminin trap gövdesinde yürütülen son deyim ise break, hata nesnesi gizlenip özel durum yeniden oluşturulur.

Aşağıdaki örnek deyimi kullanılarak trap kapana kısılmış bir DivideByZeroException özel durumu oluşturur.

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

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

Yürütmenin özel durumda durduğuna dikkat edin. Hiçbir After loop zaman ulaşılamazdı. Yürütülür sonra trap özel durum yeniden oluşturulur.

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.

Bir döngü, switchveya dışında kullanmayın breaktrap

break Bunu doğrudan destekleyen bir yapı dışında kullanıldığında (döngüler, switch, trap), PowerShell kapsayan bir yapı için çağrı yığınını arar. Kapsayan bir yapı bulamazsa, geçerli çalışma alanı sessizce sonlandırılır.

Bu, yanlışlıkla onu destekleyen bir break kapalı yapı dışında kullanan işlevlerin ve betiklerin çağıranlarını istemeden sonlandırabileceği anlamına gelir.

Komut break dosyası bloğu gibi bir ForEach-Object işlem hattının breakiçinde kullanılması işlem hattından çıkmakla olmaz, aynı zamanda çalışma alanının tamamını da sonlandırabilir.

Ayrıca bkz.