PowerShell逻辑

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)

And*_*ndi 7

我喜欢关于这种语言的行为和特征的基本问题......给我一个阅读PowerShell语言规范的借口.

您可以下载上述规范:2.03.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因为右操作数可以转换为左操作数的类型.