PS C:\> $true -contains "Lies"
True
Run Code Online (Sandbox Code Playgroud)
...?
help about_operators 说
比较运算符包括包含运算符(in,-notin,-contains,-notcontains),它们确定测试值是否出现在引用集中.
$true它不是一个容器类型,它怎么可能是一个"参考集"并且包含......什么都没有?它不包含虚假的东西.
同样$null -in $null是真的
$true 转换为1个元素的集合,因此它相当于:
# ~> @($true) -contains "Lies"
True
Run Code Online (Sandbox Code Playgroud)
因此集合中的每个元素都与"Lies"进行比较:
# ~> $true -eq "Lies"
True
Run Code Online (Sandbox Code Playgroud)
所以真正的问题是,为什么上面的表达式评估为真.发生的事情是它正在转换oepration的右侧以匹配左侧的类型:
# ~> $true -eq [Bool]"Lies"
True
Run Code Online (Sandbox Code Playgroud)
因为:
# ~> [Bool]"Lies"
True
Run Code Online (Sandbox Code Playgroud)
所以如果你交换操作:
# ~> "Lies" -eq $true
False
Run Code Online (Sandbox Code Playgroud)
因为:
# ~> [String]$true
True
Run Code Online (Sandbox Code Playgroud)
同样地,$null -in $null是一样的$null -in @($null),并$null -eq $null是真实的.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |