在powerShell中,将布尔值与带有“-eq”运算符的字符串进行比较,它将始终返回与我用于比较的布尔值相同的布尔值。
E.g。
$shouldBeFalse = $true -eq "hello"
$shouldBeTrue = $false -eq "hello"
变量$ shouldBeFalse是$ true。 变量$ shouldBeTrue是$ false。
我不得不使用“Equals”方法:
$shouldBeFalse = $true.Equals("hello")
在这种情况下,$ shouldBeFalse为$ false。
但为什么返回带有布尔值的-eq运算符这类结果?
答案 0 :(得分:9)
PowerShell将始终使用左侧参数的类型进行评估。由于你左边有一个布尔值,PowerShell会尝试和#34; Hello"作为布尔值,用于使用-eq
进行评估。
因此,在您的情况下,"hello"
将转换为布尔值[bool]"hello"
,它将评估为True,因为它不是零长度字符串。如果你做了相反的事情,你会看到类似的行为。
PS C:\> "hello" -eq $true
False
PS C:\> [bool]"hello" -eq $true
True
在第一种情况下,$true
被转换为字符串" true"这不等于"你好"因此是假的。在第二种情况下,我们演员"你好"为布尔值,-eq
将比较布尔值。由于上述原因,评估为True。
另一个很好的解释来自这个答案,可能会将您的问题标记为重复:Why is $false -eq "" true?
答案 1 :(得分:-1)
$TRUE
是> 0
和"hello" length > 0
所以它是TRUE
。 $FALSE
为== 0
和"hello" length < 0
,因此为FALSE
。
使用Equals时,会将var作为字符串进行比较,因此$TRUE
不等于hello -> FALSE
。
来源:http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx