중단 정보
간단한 설명
Foreach, For, While, Do 또는 Switch 문을 즉시 종료하는 데 사용할 수 있는 문을 설명합니다.
자세한 설명
Foreach, For 또는 While 루프와 같은 Break 문이 루프에 나타나면 Break 문으로 인해 PowerShell이 루프를 즉시 종료합니다. Switch 구문에서 Break를 사용하면 PowerShell이 코드 전환 블록을 종료합니다.
Break 문에는 포함된 루프를 종료할 수 있는 레이블이 포함될 수 있습니다. 레이블은 스크립트에서 Foreach, For 또는 While와 같은 루프 키워드(keyword) 지정할 수 있습니다.
다음 예제에서는 Break 문을 사용하여 For 문을 종료하는 방법을 보여 줍니다.
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
이 예제에서 break 문은 $i 변수가 1이면 For 루프를 종료합니다. For 문은 $i 10보다 클 때까지 True로 평가되지만 For 루프가 처음 실행될 때 PowerShell은 break 문에 도달합니다.
내부 조건이 충족되어야 하는 루프에서 Break 문을 사용하는 것이 더 일반적입니다. 다음 Foreach 문 예제를 고려합니다.
$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
$i++
if ($val -eq 30) {
break
}
}
Write-Host "30 was found in array position $i"
이 예제에서 Foreach 문은 $varB 배열을 반복합니다. 코드 블록이 실행될 때마다 $i 변수가 1씩 증가합니다. If 문은 루프가 처음 두 번 실행되면 False로 평가됩니다. 루프가 세 번째로 실행되면 $i 3과 같고 $val 변수는 30과 같습니다. 이 시점에서 Break 문이 실행되고 Foreach 루프가 종료됩니다.
Foreach 루프에서 분리하는 것과 동일한 방식으로 다른 루핑 문을 분리합니다. 다음 예제에서 Break 문은 Trap 문을 사용하여 DivideByZeroException 예외가 트래핑될 때 While 문을 종료합니다.
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
Break 문에는 레이블이 포함될 수 있습니다. 레이블과 함께 break 키워드(keyword) 사용하는 경우 PowerShell은 현재 루프를 종료하는 대신 레이블이 지정된 루프를 종료합니다. 레이블의 구문은 다음과 같습니다(이 예제에서는 While 루프에 레이블을 표시).
:myLabel while (<condition>
) { <statement list>
}
레이블은 콜론 뒤에 할당하는 이름입니다. 레이블은 문의 첫 번째 토큰이어야 하며 While와 같은 반복 키워드(keyword) 뒤에 와야 합니다.
PowerShell에서는 Foreach, For 및 While와 같은 루프 키워드만 레이블을 가질 수 있습니다.
Break는 레이블이 지정된 루프에서 실행을 이동합니다. 포함된 루프에서는 자체에서 사용할 때 중단 키워드(keyword) 있는 것과 다른 결과가 발생합니다. 이 도식 예제에는 For 문이 있는 While 문이 있습니다.
: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은 레이블이 실행을 다시 시작할 수 있는 정도를 제한하지 않습니다. 레이블은 스크립트 및 함수 호출 경계 간에 제어를 전달할 수도 있습니다.
Break 키워드(keyword) 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"라는 용어와 일치합니다. Regex 클래스는 Microsoft .NET Framework 클래스의 정규식입니다. 변수 값과 Switch 문의 첫 번째 테스트가 일치하므로 Switch 문의 첫 번째 코드 블록이 실행됩니다.
PowerShell이 첫 번째 Break 문에 도달하면 Switch 문이 종료됩니다. 예제에서 네 개의 Break 문이 제거되면 네 가지 조건이 모두 충족됩니다. 이 예제에서는 break 문을 사용하여 가장 구체적인 조건이 충족되면 결과를 표시합니다.