任何人都知道我可以如下面的例子有多个可能的值的switch语句?
switch ($myNumber) { 1 3 5 7 9 { write-host "Odd" } 2 4 6 8 10 {write-host "Even" } }
在VBScript中使用起来很简单,所以我相信我只是缺less一些简单的东西。
例如在VBScript中
Select Case myNumber Case 1,3,5,7,9 MsgBox "Odd" Case 2,4,6,8,10 MsgBox "Even" End Select
提前欢呼,
本
$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" } }
在你的情况下,你可以简单地使用
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" } }
为了完整性添加这个…
上面的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脚本Select Case通过OR操作
Select Case testexpression [Case expressionlist-n [statements-n]] . . . [Case Else [elsestatements-n]] End Select
“如果testexpression与任何Caseexpression式expression式相匹配,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
如何使用正则expression式的一个简单的替代?
switch -regex ($myNumber) { "^[13579]$" { Write-Host "Odd" } "^([2468]|10)$" { Write-Host "Even" } default { Write-Host "Other" } }