E.V*_*.L. 8 powershell logic compare equals
看一下PowerShell的帮助部分about_Comparison_Operators,我理解这一点:
PS C:\> $false,$false -eq $true
PS C:\>
Run Code Online (Sandbox Code Playgroud)
左边没有任何东西与右边的东西匹配,所以没有任何东西甚至没有返回$null
.
我不明白这个:
PS C:\> $true -eq $false,$false
True
PS C:\>
Run Code Online (Sandbox Code Playgroud)
是因为它首先$true -eq $false
返回False,然后取False并$false -eq $false
返回True吗?
更多信息
下面返回false的原因是因为它将字符串与数组进行比较,对吗?字符串不等于数组.
PS C:\> "abc" -eq "abc","def"
False
Run Code Online (Sandbox Code Playgroud)
回答?
更多的挖掘表明它$true
等于一个物体.
PS C:\> $true -eq [array]
True
PS C:\> $true -eq [string]
True
PS C:\> $true -eq [int]
True
PS C:\> $true -eq [bool]
True
Run Code Online (Sandbox Code Playgroud)
重要的是这些对象的价值.
PS C:\> $true -eq [int]0
False
Run Code Online (Sandbox Code Playgroud)
我喜欢关于这种语言的行为和特征的基本问题......给我一个阅读PowerShell语言规范的借口.
您可以下载上述规范:2.0和3.0.请参见第7.8.1节 - 平等和关系运算符.
对于问题的第一部分,实际上会返回一些东西 - 一个空数组,如下所示: ($false,$false -eq $true).psbase
Length : 0
LongLength : 0
Rank : 1
SyncRoot : {}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 0
Run Code Online (Sandbox Code Playgroud)
从规格 -
如果左操作数指定的值不是集合,则结果的类型为bool.否则,结果是一个可能为空的无约束1维数组,其中包含与右操作数指定的值进行比较时测试True的集合元素.
对于第二部分,因为左操作数本身就是一个bool,我认为它总是结果.仅当右操作数是集合时才这样.
一些例子:
$true -eq 1,2,3,4
$true -eq '','','',''
$true -eq '',1,$true,$false
$true -eq $null,$false,1,''
Run Code Online (Sandbox Code Playgroud)
所有这些都归来了$true
.相反,所有这些都回归$false
$false -eq 1,2,3,4
$false -eq '','','',''
$false -eq '',1,$true,$false
$false -eq $null,$false,1,''
$false -eq $true,$true,$true
Run Code Online (Sandbox Code Playgroud)
左操作数的类型非常重要.这将返回$true
:$false -eq 0
因为右操作数可以转换为左操作数的类型.