Ast*_*ium 4 string powershell boolean compare equals
在powerShell中,将布尔值与带有"-eq"运算符的字符串进行比较,它将始终返回与我用于比较的布尔值相同的布尔值.
例如
$shouldBeFalse = $true -eq "hello"
$shouldBeTrue = $false -eq "hello"
Run Code Online (Sandbox Code Playgroud)
变量$ shouldBeFalse是$ true.变量$ shouldBeTrue是$ false.
我不得不使用"Equals"方法:
$shouldBeFalse = $true.Equals("hello")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$ shouldBeFalse是$ false.
但是为什么返回带有布尔值的-eq运算符这样的结果呢?
Mat*_*att 10
PowerShell将始终使用左侧参数的类型进行评估.由于左侧有一个布尔值,因此PowerShell会尝试将"Hello"转换为布尔值,以便进行评估-eq.
因此,在您的情况下,"hello"将转换为布尔值[bool]"hello",该值将计算为True,因为它不是零长度字符串.如果你做了相反的事情,你会看到类似的行为.
PS C:\> "hello" -eq $true
False
PS C:\> [bool]"hello" -eq $true
True
Run Code Online (Sandbox Code Playgroud)
在第一种情况下$true转换为字符串"true",它不等于"hello"因此为false.在第二种情况下,我们将"hello"转换为boolean,因此-eq将比较布尔值.由于提到的原因,此评估为True.
另一个很好的解释来自这个答案,它可能会将你的问题标记为重复:为什么$ false -eq""是真的?