powershell - $ null是否应位于等式比较的左侧? (带有数组的-eq)

标签 powershell

与同事讨论时,$null应该位于支票的左侧还是右侧?为什么这很重要的任何例子?

$abc = $null
$null -eq $abc
True
$abc -eq $null
True

一切都好
$abc = 6,7,$null,8,9
$null -eq $abc
False
$abc -eq $null
*No output*

有人可以解释比较数组时发生了什么吗?

最佳答案

执行比较操作时,PowerShell将首先评估操作数操作数,以确定它是集合还是标量值。如果它是标量,它将把操作数彼此比较为整个对象。

2 -eq 1,2,$null,3
False

$null -eq 1,2,$null,3
False

4 -eq 1,2,$null,3
False

如果它是一个集合,它将在集合中进行迭代,将每个元素与第二个操作数进行比较,如果找到匹配项,则返回第二个操作数的值。
1,2,$null,3 -eq 2
2

1,2,$null,3 -eq $null
<nothing appears, indicating returned value is $null>

1,2,3 -eq 4
<nothing appears, indicating returned value is $null>

第二个和第三个示例之间的关键区别。除非您绝对知道,第二个操作数始终是$null还是从不,否则您将无法信任比较操作的输出。

附带说明一下,如果两个操作数都是集合,则每种情况下-eq都会返回$null,因为您不能使用-eq来比较集合。

因此,为了回答这个问题,通常将$null放在左侧,因为在比较操作中使用$null时,假定您要比较标量值。如果这个假设是错误的,那么$null可能会更好地放在另一侧,但这不太可能。

相反,我总是将$null放在右边,因为我在上述假设下编写了我的代码-当在比较操作中明确提到$null时,我总是比较标量值。这样,当我返回非 bool 值时,我知道我没有正确访问方程式中的集合对象。但是,我被困在陷阱中,因此,通过更改方式可以更好地为我的编码实践服务。

总而言之,就像任何编码实践一样,这是一个见仁见智的问题。如果我要教PowerShell,我会教这种做法。但是,我发现我不太可能改变自己的煽动性方式。

关于powershell - $ null是否应位于等式比较的左侧? (带有数组的-eq),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217913/

相关文章:

azure - 如果 'foreach' 中的所有值均为 true

powershell - 在.NET4中使用PowerShell时WPK出现问题

powershell - 如何获取 Azure 资源的最新 API 版本

声明性 Jenkins 管道中的 Powershell 脚本

powershell - cmd.exe powershell 哈希表

powershell - IF 语句错误

powershell - 从文本文件中读取特定文本

powershell - Azure 资源管理器虚拟机状态

powershell - Arraylist 是否通过 PowerShell 中的引用传递给函数

powershell - Invoke-Command 更改输出编码