다음을 통해 공유


계속에 대하여

간단한 설명

continue 문이 프로그램 루프의 맨 위, switch 문, 또는 trap 문으로 프로그램 흐름을 즉시 반환하는 방법을 설명합니다.

긴 설명

continue 문은 현재 제어 블록을 종료하지만 완전히 종료하지 않고 실행을 계속하는 방법을 제공합니다. 주장은 레이블을 지원합니다. 레이블은 스크립트의 문에 할당하는 이름입니다.

루프에서 계속 사용

레이블이 지정되지 않은 continue 문은 for, foreach, do또는 while 문으로 제어되는 가장 안쪽 루프의 맨 위로 프로그램 흐름을 즉시 반환합니다. 루프의 현재 반복이 종료되고 루프는 다음 반복으로 계속됩니다.

다음 예제에서는 while 변수가 5인 경우 프로그램 흐름이 $ctr 루프의 맨 위로 돌아갑니다. 따라서 5를 제외하고 1에서 10 사이의 모든 숫자가 표시됩니다.

while ($ctr -lt 10)
{
    $ctr += 1
    if ($ctr -eq 5)
    {
        continue
    }

    Write-Host -Object $ctr
}

for 루프를 사용하는 경우 <Repeat> 문과 <Condition> 테스트에서 실행이 계속됩니다. 아래 예제에서는 $i 키워드 이후에 continue 감소하므로 무한 루프가 발생하지 않습니다.

#   <Init>  <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
    Write-Host -Object $i
    if ($i -eq 5)
    {
        continue
        # Will not result in an infinite loop.
        $i--
    }
}

루프에서 레이블이 지정된 continue 문 사용

레이블이 지정된 continue 문은 반복 실행을 종료하고 대상 바깥쪽 반복 또는 switch 문 레이블로 컨트롤을 전송합니다.

다음 예제에서는 for$condition일 때 가장 안쪽 이 종료되고, 반복은 for의 두 번째 labelB 루프로 계속됩니다.

:labelA for ($i = 1; $i -le 10; $i++) {
    :labelB for ($j = 1; $j -le 10; $j++) {
        :labelC for ($k = 1; $k -le 10; $k++) {
            if ($condition) {
                continue labelB
            } else {
                $condition = Update-Condition
            }
        }
    }
}

switch 문에서 continue 사용

continue 내의 레이블이 지정되지 않은 switch 문은 현재 switch 반복의 실행을 종료하고 switch 맨 위로 컨트롤을 전송하여 다음 입력 항목을 가져옵니다.

단일 입력 항목이 있는 경우 continue 전체 switch 문을 종료합니다. switch 입력이 컬렉션이면 switch 컬렉션의 각 요소를 테스트합니다. continue 현재 반복을 종료하고 switch 다음 요소로 계속됩니다.

switch (1,2,3) {
  2 { continue }  # moves on to the next element, 3
  default { $_ }
}
1
3

트랩 문에서 continue 사용

본문에서 실행된 최종 문이 trap 문이 continue경우 트랩된 오류는 자동으로 무시되고 실행은 trap 발생시킨 문 바로 다음 문으로 계속됩니다.

루프, 스위치 또는 트랩 외부에서 계속 사용 안 함

이 이를 직접 지원하는 구문(루프, , )이 아닌 외부에서 사용될 때, PowerShell은 바깥쪽 구문을 찾기 위해 호출 스택 을 검색합니다. 포함하는 구문을 찾을 수 없는 경우, 현재 runspace는 아무런 알림 없이 종료됩니다.

즉, 이를 지원하는 감싸는 구문 외부에서 continue를 실수로 사용하는 함수와 스크립트는 호출자를 실수로 종료시킬 수 있습니다.

scriptblock과 같은 ForEach-Object 파이프라인 내부에서 사용하면 continue 파이프라인을 종료할 뿐만 아니라 전체 Runspace가 종료될 수 있습니다.

참고하십시오