- 在if语句中匹配几个$ vars

时间:2014-10-28 08:58:08

标签: powershell if-statement match

我有这个,这不起作用:

$var1 = "6.0.6001"
$var2 = "6.1.7001"
$var3 = "6.2.8074"
$var4 = "6.3.8074"
if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?") {
    write-host "1"
}else{
    write-host "2"
}

无论如何,返回1。

这应该是什么样的?

感谢。

2 个答案:

答案 0 :(得分:0)

运行此代码:

if("6.2.?" -or "6.3.?") {
    write-host "1"
}else{
    write-host "2"
}

无论如何,它也会返回1.

将您的条件更改为:

if($var1 -match "6.1.?" -or $var1 -match "6.2.?" -or $var1 -match "6.3.?") 

甚至更好:

if($var1 -match "6.[1-3].?")

答案 1 :(得分:0)

只是详细说明亚当的回答。您If语句未按预期工作,因为PowerShell只看到了您不想要的三个条件

if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?")
if(($var1 -match "6.1.?") -or ("6.2.?" -or "6.3.?"))

上面的两行功能相同。要进一步细分第二个操作("6.2.?" -or "6.3.?"):转换为布尔值的非零长度字符串将始终为$true。将两个非零长度字符串与-or进行比较将始终返回$true。您示例中的第一个句子($var1 -match "6.1.?")$falseIf($true -or $false)基本上是您的If声明归结为哪个声明总是会返回$true。亚当斯的答案显示了如何获得你正在寻找的逻辑

if($var1 -match "6.1.?" -or $var1 -match "6.2.?" -or $var1 -match "6.3.?") 
if(($var1 -match "6.1.?") -or ($var1 -match "6.2.?") -or ($var1 -match "6.3.?")) 

以上两种说法都是一样的。第二个有助于理解逻辑。有关更多信息,请参阅about_Logical_Operators。当逻辑没有按照您希望的方式运行时,您只需要括号。