คำสั่ง Powershell Switch ที่มีหลายค่า


11

ใครรู้ว่าฉันสามารถมีคำสั่งสลับกับค่าที่เป็นไปได้หลายอย่างเช่นตัวอย่างด้านล่าง?

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

ในกรณีของคุณคุณสามารถใช้

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

กำลังเพิ่มสิ่งนี้เพื่อความสมบูรณ์ ...

รหัส PowerShell ที่ใกล้เคียงที่สุดกับสคริปต์ VB ข้างต้นคือ:

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 script Select Case ทำงานผ่าน OR

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

"ถ้า testexpression ตรงกับนิพจน์นิพจน์รายการเคสใด ๆ คำสั่งที่ตามมาว่าประโยคส่วนใหญ่จะถูกดำเนินการจนถึงส่วนกรณีถัดไป ... " เลือกคำชี้แจงกรณี

สิ่งที่น่าสนใจที่ฉันไม่สามารถเข้าใจได้คือผลลัพธ์นี้:

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 


-1

วิธีการเกี่ยวกับเรื่องนี้เป็นทางเลือกที่ง่ายโดยใช้regex ?

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

1
-1 สำหรับ|10ส่วน
Deer Hunter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.