여러 값을 가진 Powershell Switch 문


11

누구나 아래 예와 같이 여러 가능한 값으로 switch 문을 사용하는 방법을 알고 있습니까?

switch ($myNumber) {
   1 3 5 7 9 { write-host "Odd" }
   2 4 6 8 10 {write-host "Even" }
}

VBScript에서 쉬웠 기 때문에 간단한 것이 빠져 있다고 확신합니다.

예를 들어 VBScript에서

Select Case myNumber 
   Case 1,3,5,7,9
      MsgBox "Odd"
   Case 2,4,6,8,10
      MsgBox "Even"
End Select

미리 건배

답변:


11
$myNumber = 3
$arrA = 1, 3, 5, 7, 9
$arrB = 2, 4, 6, 8, 10
switch ($myNumber) { 
    {$arrA -contains $_} { write-host "Odd" } 
    {$arrB -contains $_} { write-host "Even" }
}

+1 -contains 대신 -eq를 사용하는 것이 더 좋습니다.
Bernie White

11

귀하의 경우 간단하게 사용할 수 있습니다

switch ($myNumber) {
  { $_ % 2 -eq 1 } { "Odd" }
  { $_ % 2 -eq 0 } { "Even" }
}

VB에서 할 수있는 것을 모델링하려는 실제 시도는 아마도

switch ($myNumber) {
  { 1,3,5,7,9  -contains $_ } { "Odd" }
  { 2,4,6,8,10 -contains $_ } { "Even" }
}

나는 전통적인 스위치 문에 더 익숙하기 때문에 이것을 좋아합니다.
Mark Henderson

0

완전성을 위해 이것을 추가하는 중 ...

위 VB 스크립트에 가장 가까운 PowerShell 코드는 다음과 같습니다.

PS C:\> switch (1) {  
  {$_ -eq 1 -or $_ -eq 3 -or $_ -eq 5 -or $_ -eq 7 -or $_ -eq 9} { "Odd"}
  {$_ -eq 2 -or $_ -eq 4 -or $_ -eq 6 -or $_ -eq 8 -or $_ -eq 10} { "Even"}
}
Odd

PS C:\VSProjects\Virtus\App_VM> switch (2) {  
  {$_ -eq 1 -or $_ -eq 3 -or $_ -eq 5 -or $_ -eq 7 -or $_ -eq 9} { "Odd"}
  {$_ -eq 2 -or $_ -eq 4 -or $_ -eq 6 -or $_ -eq 8 -or $_ -eq 10} { "Even"}
}
Even

VB 스크립트 선택 사례는 OR을 통해 작동하기 때문에

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else
      [elsestatements-n]]
End Select

"testexpression이 Case expressionlist 표현식과 일치하면 해당 Case 절 다음의 명령문이 다음 Case 절까지 실행됩니다 ..." Select Case Statement

내가 알아낼 수 없었던 흥미로운 것은이 결과입니다.

PS C:\> switch (1) {  
  {1 -or 3 -or 5 -or 7 -or 9} { "Odd"}
  {2 -or 4 -or 6 -or 8 -or 10} { "Even"}
}
Odd
Even 

0

switch ($myNumber) {
{$_ -in 1, 3, 5, 7, 9} { write-host "Odd" }
{$_ -in 2, 4, 6, 8, 10} {write-host "Even" }
}


-1

정규식을 사용하는 쉬운 대안은 어떻습니까?

switch -regex ($myNumber)
{
   "^[13579]$"     { Write-Host "Odd" }
   "^([2468]|10)$" { Write-Host "Even" }
   default         { Write-Host "Other" }
}

1
|10부품의 경우 -1입니다 .
사슴 사냥꾼
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.