在powerShell中,使用“ -eq”运算符比较带有字符串的布尔值,它将始终返回与我以前进行比较的布尔值。
例如
$shouldBeFalse = $true -eq "hello"
$shouldBeTrue = $false -eq "hello"
变量$ shouldBeFalse为$ true。变量$ shouldBeTrue为$ false。
我不得不使用“等于”方法:
$shouldBeFalse = $true.Equals("hello")
在这种情况下,$ shouldBeFalse是$ false。
但是,为什么用布尔型的结果返回-eq运算符呢?
PowerShell将始终使用左侧参数的类型进行评估。由于左侧有一个布尔值,PowerShell将尝试将“ Hello”强制转换为布尔值,以便使用进行评估-eq
。
因此,在您的情况下,由于它不是长度为零的字符串,因此将"hello"
其转换为布尔值[bool]"hello"
,该值将计算为True。如果执行相反的操作,则会看到类似的行为。
PS C:\> "hello" -eq $true
False
PS C:\> [bool]"hello" -eq $true
True
在第一种情况下,$true
将其转换为字符串“ true”,该字符串不等于“ hello”,因此为false。在第二种情况下,我们将“ hello”强制转换为布尔值,因此-eq
将比较布尔值。由于上述原因,评估结果为True。
这个答案还有一个很好的解释,它可能会使您的问题标记为重复:为什么$ false -eq“” true?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句