항목
about_Switch
간단한 설명
스위치를 사용하여 여러 if 문을 처리하는 방법에 대해 설명합니다.
자세한 설명
if 문을 사용하여 스크립트 또는 프로그램에서 결정을 내릴 수 있습니다. 기본적으로 "이 조건이 존재하면 이
작업을 수행하십시오. 그렇지 않으면 다른 작업을 수행하십시오."라고 요구할 것입니다. 이 작업은 원하는
횟수만큼 수행할 수 있지만 조건 목록이 긴 경우에는 if 문을 사용하기가 힘들어집니다. 긴 조건 목록을 switch
문으로 결합할 수 있습니다. 모든 분기 문에서처럼 스크립트 블록은 중괄호({})로 묶어야 합니다.
switch 문은 사실상 일련의 if 문으로, 식을 사례별로 각 조건에 일치시킵니다. 일치하는 항목이
발견되면 해당 조건과 연관된 작업이 수행됩니다. 기본 switch 문의 형식은 다음과 같습니다.
PS> $a = 3
PS> switch ($a) {
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
간단한 이 예제에서는 값을 구한 다음 목록의 각 조건과 비교합니다. 여기서는 일치하는 항목의 문자열을
표시하는 작업만 수행됩니다. 그러나 모든 조건을 확인할 경우 문제가 발생할 수 있습니다. 예를 들면
다음과 같습니다.
PS> $day = "day5"
PS> switch ($day){
day1 {"Monday"; break}
day2 {"Tuesday"; break}
day3 {"Wednesday"; break}
day4 {"Thursday"; break}
day5 {"Friday"; break}
day6 {"Saturday"; break}
day7 {"Sunday"; break}
day5 {"Too many days"; break}
}
Friday
목록에는 day5 조건이 두 개 있습니다. 그러나 각 조건 끝에 있는 break가 찾기를 중지하고 찾은 작업을
수행하도록 switch에 지시합니다. break 문이 이 위치에 없었다면 day5 작업이 둘 다 수행될 것입니다.
전환할 값이 배열이면 요소 0에서 시작하여 배열의 각 요소가 순서대로 평가됩니다. 적어도 하나의 조건을
만족하는 요소가 하나 이상 있어야 합니다. 그렇지 않으면 오류가 발생합니다. 기본 절이 두 개 이상인
경우에도 오류가 발생합니다.
전체 switch 구문은 다음과 같습니다.
switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline )
또는
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
위 구문 뒤에 다음 구문이 옵니다.
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
사용하는 매개 변수가 없을 경우 스위치는 기본적으로 대/소문자 구분 없는 완전한 일치가 적용되는 것처럼
작동합니다. "파이프라인"에 따라 배열이 생성된 경우 배열의 각 요소는 오프셋 기준으로 오름차순(0에서
시작)으로 평가됩니다.
스위치 코드 블록에는 조건 요소가 하나 이상 있어야 하며 기본 절은 하나만 있을 수 있습니다. 기본 절이 두
개 이상인 경우 ParseException이 throw됩니다.
스위치에는 다음과 같은 매개 변수가 있습니다.
Regex 일치하는 절이 문자열인 경우 정규식 문자열로 처리됨을 나타냅니다. 이 매개
변수를 사용하면 Wildcard 및 Exact를 사용할 수 없습니다. 일치하는 절이 문자열이
아닌 경우 이 매개 변수는 무시됩니다.
Wildcard 일치하는 절이 문자열인 경우 와일드카드 문자열로 처리됨을 나타냅니다. 이 매개 변수를
사용하면 Regex 및 Exact를 사용할 수 없습니다. 일치하는 절이 문자열이 아닌 경우 이 매개
변수는 무시됩니다.
Exact 일치하는 절이 문자열인 경우 정확하게 일치해야 함을 나타냅니다. 이 매개 변수를 사용하면
Wildcard 및 Regex를 사용할 수 없습니다. 일치하는 절이 문자열이 아닌 경우 이 매개 변수는
무시됩니다.
CaseSensitive 일치하는 절이 문자열인 경우 대/소문자를 구분하도록 수정합니다. 일치하는 절이 문자열이
아닌 경우 이 매개 변수는 무시됩니다.
File 문 대신 파일(또는 담당자)의 입력을 사용합니다. File 매개 변수가 여러 개 사용된 경우
마지막 매개 변수가 사용됩니다. 파일의 각 줄을 읽고 스위치 블록을 통해 전달합니다.
Regex, Wildcard 또는 Exact를 여러 번 사용할 수 있지만 마지막으로 사용된 매개 변수만 동작을 제어합니다.
Break 키워드는 더 이상 처리가 발생하지 않고 switch 문이 종료됨을 나타냅니다.
Continue 키워드는 현재 토큰에 대한 처리가 중단되고 조건문의 다음 토큰이 평가됨을 나타냅니다. 사용
가능한 토큰이 없으면 switch 문이 종료됩니다.
"{ expression }" 블록은 비교 시 평가되는 코드 블록일 수 있습니다. 현재 개체는 자동 변수 $_에
바인딩되며 식을 평가하는 동안 사용할 수 있습니다. 이 식이 "True"로 평가되면 비교가 일치하는 것으로
간주됩니다. 이 식은 새 범위에서 평가됩니다.
switch 문의 "Default" 키워드는 일치하는 항목을 찾을 수 없는 경우 키워드 다음에 오는 코드 블록이
평가됨을 나타냅니다. 복합 목록의 닫는 중괄호( } )는 명시적 break이기 때문에 프로그램 흐름은 블록 간에
허용되지 않습니다.
일치하는 항목이 여러 개 발견된 경우 일치하는 항목마다 식이 실행됩니다. 이 문제를 방지하기 위해 Break
또는 Continue 키워드를 사용하여 추가 비교를 중지할 수 있습니다.
참고 항목
about_Break
about_Continue
about_If
about_Script_Blocks