about_Switch
간단한 설명
스위치를 사용하여 여러 if
문을 처리하는 방법을 설명합니다.
자세한 설명
스크립트 또는 함수에서 조건을 확인하려면 문을 사용합니다 if
. 이 문은 if
변수 값과 개체의 속성을 포함하여 다양한 유형의 조건을 확인할 수 있습니다.
여러 조건을 확인하려면 문을 사용합니다 switch
. 이 switch
문은 일련의 if
문과 동일하지만 더 간단합니다. 문은 switch
각 조건과 선택적 작업을 나열합니다. 조건이 획득되면 작업이 수행됩니다.
문은 switch
자동 변수 및 $switch
자동 변수를 $_
사용할 수 있습니다. 자세한 내용은 about_Automatic_Variables를 참조하세요.
구문
기본 switch
문 형식은 다음과 같습니다.
Switch (<test-expression>)
{
<result1-to-be-matched> {<action>}
<result2-to-be-matched> {<action>}
}
해당하는 if
문은 다음과 같습니다.
if (<result1-to-be-matched> -eq (<test-expression>)) {<action>}
if (<result2-to-be-matched> -eq (<test-expression>)) {<action>}
값을 <test-expression>
반환하기 위해 식 모드에서 계산되는 단일 식입니다.
값 <result-to-be-matched>
이 입력 값과 비교되는 식입니다. 식에는 부울 값을 반환하는 리터럴 값(문자열 또는 숫자), 변수 및 scriptblock이 포함됩니다.
숫자로 인식되지 않는 모든 따옴색되지 않은 값은 문자열로 처리됩니다.
혼동 또는 의도하지 않은 문자열 변환을 방지하려면 항상 문자열 값을 따옴표로 묶어야 합니다. 식이 올바르게 평가되도록 식을 괄호 ()
로 묶고 하위 식 만들기를 만듭니다.
값이 비교 식의 왼쪽에 있음을 <result-to-be-matched>
이해하는 것이 중요합니다. 즉 <test-expression>
, 결과는 오른쪽에 있으며 비교를 위해 왼쪽 값의 형식으로 변환할 수 있습니다. 자세한 내용은 about_Comparison_Operators 참조 하세요.
값 default
은 다른 일치 항목이 없을 때 사용되는 작업에 대해 예약됩니다.
자동 변수는 $_
문에 switch
전달된 식의 값을 포함하며 명령문 범위 <result-to-be-matched>
내에서 평가 및 사용할 수 있습니다.
전체 switch
문 구문은 다음과 같습니다.
switch [-regex | -wildcard | -exact] [-casesensitive] (<test-expression>)
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
또는
switch [-regex | -wildcard | -exact] [-casesensitive] -file filename
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
매개 변수를 사용하지 switch
않는 경우 Exact 매개 변수를 사용하는 것과 동일하게 동작합니다. 값에 대해 대/소문자를 구분하지 않는 일치를 수행합니다. 값이 컬렉션이면 각 요소가 나타나는 순서대로 평가됩니다.
문에는 switch
하나 이상의 조건문이 포함되어야 합니다.
default
값이 조건과 일치하지 않으면 절이 트리거됩니다. 문의 절과 if
동일합니다else
. 각 switch
문에는 하나의 default
절만 허용됩니다.
switch
에는 다음 매개 변수가 있습니다.
- 와일드카드 - 조건이 와일드카드 문자열임을 나타냅니다. match 절이 문자열이 아니면 매개 변수가 무시됩니다. 비교는 대/소문자를 구분합니다.
- Exact - 일치 절이 문자열인 경우 정확히 일치해야 임을 나타냅니다. match 절이 문자열이 아니면 이 매개 변수는 무시됩니다. 비교는 대/소문자를 구분합니다.
- CaseSensitive - 대/소문자를 구분하는 일치를 수행합니다. match 절이 문자열이 아니면 이 매개 변수는 무시됩니다.
- 파일 - .가 아닌 파일에서 입력을 가져옵니다
<test-expression>
. 여러 파일 매개 변수가 포함된 경우 마지막 매개 변수만 사용됩니다. 파일의 각 줄은 문에 의해 읽고 평가됩니다switch
. 비교는 대/소문자를 구분합니다. - Regex - 조건에 대한 값의 정규식 일치를 수행합니다. match 절이 문자열이 아니면 이 매개 변수는 무시됩니다.
비교는 대/소문자를 구분합니다.
$matches
자동 변수는 일치하는 문 블록 내에서 사용할 수 있습니다.
참고 항목
Regex 및 와일드카드와 같이 충돌하는 값을 지정할 때 지정된 마지막 매개 변수가 우선적으로 적용되며 충돌하는 모든 매개 변수는 무시됩니다. 여러 매개 변수 인스턴스도 허용됩니다. 그러나 나열된 마지막 매개 변수만 사용됩니다.
예제
다음 예제에서 이 문은 switch
테스트 값 3을 각 조건과 비교합니다. 테스트 값이 조건과 일치하면 작업이 수행됩니다.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
이 간단한 예제에서는 값 3과 일치하는 값이 있더라도 목록의 각 조건과 값을 비교합니다. 다음 switch
문에는 값 3에 대한 두 가지 조건이 있습니다. 기본적으로 모든 조건이 테스트됨을 보여 줍니다.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Three again.
일치 후 비교를 중지하도록 지시 switch
하려면 문을 사용합니다 break
. 문은 break
문을 종료합니다 switch
.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."; Break}
4 {"It is four."}
3 {"Three again."}
}
It is three.
테스트 값이 배열과 같은 컬렉션인 경우 컬렉션의 각 항목이 나타나는 순서대로 평가됩니다. 다음 예제에서는 4와 2를 평가합니다.
switch (4, 2)
{
1 {"It is one." }
2 {"It is two." }
3 {"It is three." }
4 {"It is four." }
3 {"Three again."}
}
It is four.
It is two.
다음 예제와 같이 모든 break
문은 각 값이 아니라 컬렉션에 적용됩니다. 문은 switch
값 4의 조건으로 문에 의해 break
종료됩니다.
switch (4, 2)
{
1 {"It is one."; Break}
2 {"It is two." ; Break }
3 {"It is three." ; Break }
4 {"It is four." ; Break }
3 {"Three again."}
}
It is four.
이 예제 switch
에서 문은 해시 테이블의 값 형식을 테스트합니다. 실행할 scriptblock을 선택하려면 부울 값을 반환하는 식을 사용해야 합니다.
$var = @{A = 10; B = 'abc'}
foreach ($key in $var.Keys) {
switch ($var[$key].GetType()) {
{ $_ -eq [int32] } { "$key + 10 = $($var[$key] + 10)" }
{ $_ -eq [string] } { "$key = $($var[$key])" }
}
}
A + 10 = 20
B = abc
이 예제에서는 문자열 또는 숫자 데이터가 아닌 개체가 에 전달됩니다 switch
. 개체 switch
에서 문자열 강제 변환을 수행하고 결과를 평가합니다.
$test = @{
Test = 'test'
Test2 = 'test2'
}
$test.ToString()
switch -Exact ($test)
{
'System.Collections.Hashtable'
{
'Hashtable string coercion'
}
'test'
{
'Hashtable value'
}
}
System.Collections.Hashtable
Hashtable string coercion
이 예제에서는 일치하는 사례가 없으므로 출력이 없습니다.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
절을 default
추가하면 다른 조건이 성공하지 않을 때 작업을 수행할 수 있습니다.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
Default {
"No matches"
}
}
No matches
대/소문자를 일치하려면 단어 "14"를 사용하거나 -Regex
매개 변수를 -Wildcard
사용해야 합니다.
PS> switch -Wildcard ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
That's too many.
다음 예제에서는 매개 변수를 -Regex
사용합니다.
$target = 'https://bing.com'
switch -Regex ($target)
{
'^ftp\://.*$' { "$_ is an ftp address"; Break }
'^\w+@\w+\.com|edu|org$' { "$_ is an email address"; Break }
'^(http[s]?)\://.*$' { "$_ is a web address that uses $($matches[1])"; Break }
}
https://bing.com is a web address that uses https
다음 예제에서는 스크립트 블록을 문 조건으로 사용하는 방법을 switch
보여 줍니다.
switch ("Test")
{
{$_ -is [String]} {
"Found a string"
}
"Test" {
"This $_ executes as well"
}
}
Found a string
This Test executes as well
다음 예제에서는 두 날짜 값이 포함된 배열을 처리합니다. 각 <value-scriptblock>
날짜의 Year 속성을 비교합니다. 시작 <action-scriptblock>
메시지 또는 2022년 초까지의 일 수가 표시됩니다.
switch ((Get-Date 1-Jan-2022), (Get-Date 25-Dec-2021)) {
{ $_.Year -eq 2021 } {
$days = ((Get-Date 1/1/2022) - $_).days
"There are $days days until 2022."
}
{ $_.Year -eq 2022 } { 'Welcome to 2022!' }
}
값이 여러 조건과 일치하면 각 조건에 대한 작업이 실행됩니다. 이 동작을 변경하려면 키워드를 continue
사용합니다break
.
키워드는 break
처리를 중지하고 문을 종료합니다 switch
.
키워드는 continue
현재 값 처리를 중지하지만 후속 값은 계속 처리합니다.
다음 예제에서는 숫자 배열을 처리하고 홀수인지 짝수인지를 표시합니다. 음수는 키워드를 사용하여 건너뜁니다 continue
. 숫자가 아닌 값이 발견되면 키워드로 실행이 break
종료됩니다.
switch (1,4,-1,3,"Hello",2,1)
{
{$_ -lt 0} { continue }
{$_ -isnot [Int32]} { break }
{$_ % 2} {
"$_ is Odd"
}
{-not ($_ % 2)} {
"$_ is Even"
}
}
1 is Odd
4 is Even
3 is Odd
참고 항목
PowerShell