我有这个,这不起作用:
$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。
这应该是什么样的?
感谢。
答案 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.?")
是$false
。 If($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。当逻辑没有按照您希望的方式运行时,您只需要括号。