about_Break
간단한 설명
break
현재 제어 블록을 종료하는 방법을 제공하는 문을 설명합니다.
자세한 설명
이 문은 break
현재 제어 블록을 종료하는 방법을 제공합니다.
실행은 제어 블록 뒤의 다음 문에서 계속됩니다. 이 문은 레이블을 지원합니다. 레이블은 스크립트의 문에 할당하는 이름입니다.
루프에서 사용 break
명령문이 break
루프(예: foreach
, for
, do
또는 while
루프)에 나타나면 PowerShell은 루프를 즉시 종료합니다.
문에는 break
포함된 루프를 종료할 수 있는 레이블이 포함될 수 있습니다. 레이블은 스크립트에서 루프 키워드(예: foreach
, for
또는 while
)를 지정할 수 있습니다.
다음 예제에서는 문을 사용하여 break
문을 종료 for
하는 방법을 보여줍니다.
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
이 예제에서는 변수가 break
for
1이면 문이 루프를 $i
종료합니다. 문이 10보다 클 때까지 True로 평가되더라도 for
루프가 처음 실행될 때 PowerShell은 break 문에 for
도달합니다. $i
내부 조건이 충족되어야 하는 루프에서 문을 사용하는 break
것이 더 일반적입니다. 다음 foreach
문 예제를 고려합니다.
$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"
이 예제에서 문은 foreach
배열을 $varB
반복합니다. 이 문은 if
루프가 실행되고 변수 $i
가 1씩 증가하면 처음 두 번 False로 평가됩니다. 루프가 세 번째로 실행 $i
되면 2와 같고 변수는 $val
30과 같습니다. 이때 break
문이 실행되고 루프가 foreach
종료됩니다.
루프에 레이블이 지정된 break
사용
문에는 break
레이블이 포함될 수 있습니다. 레이블과 함께 키워드를 break
사용하는 경우 PowerShell은 현재 루프를 종료하는 대신 레이블이 지정된 루프를 종료합니다.
레이블은 콜론 뒤에 할당한 이름입니다. 레이블은 문에서 첫 번째 토큰이어야 하며 루프 키워드(예: while
.) 뒤에 와야 합니다.
break
는 레이블이 지정된 루프에서 실행을 이동합니다. 포함된 루프에서는 키워드가 자체에서 사용될 때와 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로 평가되면 "빨간색"이라는 레이블이 지정된 루프 후에 스크립트 실행이 다시 시작됩니다. 변수가 $c
True로 평가되면 "노란색"이라는 레이블이 지정된 루프 후에 스크립트 컨트롤의 실행이 다시 시작됩니다.
변수가 $a
True로 평가되면 가장 안쪽 루프 후에 실행이 다시 시작됩니다. 레이블이 필요하지 않습니다.
PowerShell은 레이블이 실행을 다시 시작할 수 있는 정도를 제한하지 않습니다. 레이블은 스크립트 및 함수 호출 경계 간에 제어를 전달할 수도 있습니다.
문에서 switch
사용 break
구문 break
에서 switch
PowerShell이 코드 블록을 종료 switch
하도록 합니다.
키 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
와 일치합니다. 변수 값과 문의 첫 번째 테스트가 switch
일치하므로 문의 첫 번째 코드 블록이 switch
실행됩니다.
PowerShell이 첫 번째 break
문 switch
에 도달하면 문이 종료됩니다. 예제에서 네 break
개의 문이 제거되면 네 가지 조건이 모두 충족됩니다. 이 예제에서는 break
문을 사용하여 가장 구체적인 조건이 충족되면 결과를 표시합니다.
문에서 trap
사용 break
문 break
본문 trap
에서 실행된 최종 문이 있으면 오류 개체가 표시되지 않으며 예외가 다시 throw됩니다.
다음 예제에서는 문을 사용하여 트래핑되는 DivideByZeroException 예외를 trap
만듭니다.
function test {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
$i = 3
'Before loop'
while ($true) {
"1 / $i = " + (1 / $i--)
}
'After loop'
}
test
예외에서 실행이 중지됩니다. 그것은 After loop
결코 도달하지 않습니다.
예외는 실행 후 trap
다시 throw됩니다.
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.
루프 switch
외부에서 사용하지 break
마세요. 또는trap
직접 지원하는 구문 외부에서 사용되는 경우 break
(루프, switch
, trap
) PowerShell 은 바깥쪽 구문에 대한 호출 스택 을 조회합니다. 바깥쪽 구문을 찾을 수 없는 경우 현재 Runspace는 조용히 종료됩니다.
즉, 해당 함수와 스크립트를 지원하는 바깥쪽 구문 외부를 실수로 사용하는 break
함수와 스크립트는 실수로 호출자를 종료할 수 있습니다.
스크립트 블록과 같은 파이프라인 내부에서 사용하면 break
파이프라인 break
을 ForEach-Object
종료할 뿐만 아니라 전체 Runspace가 종료될 수 있습니다.
참고 항목
PowerShell