【发布时间】:2014-09-04 04:56:16
【问题描述】:
因此,您学会使用 PowerShell 避免的第一个陷阱是这个 foreach:
$null | foreach { "hello" }
将执行一次。然而,我试图向同事解释这个概念并且发生了以下事情:
PS> $a = 1..9 | ? {$_ -eq 10}
PS> $a | % { "hello" }
PS>
我试图了解以下情况,但 $a 似乎是 $null,简单明了。
PS> $a = 1..9 | ? {$_ -eq 10}
PS> $a -eq $null
True
PS> $a.gettype()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $a.gettype()
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
PS> $a | gm
gm : No object has been specified to the get-member cmdlet.
At line:1 char:6
+ $a | gm
+ ~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
PS> $a | % { "hello" }
PS> $null | % { "hello" }
hello
PS>
是否存在两种不同“类型”的 null? $a 真的是一个因某种原因而被我混淆的数组吗?
【问题讨论】:
-
我一直认为
GetType是找出变量类型的最可靠方法,而忽略了脚本语言的模糊性。我一定是错的? -
仅供参考,这在 PS V3 中不再适用
-
在此处查看相关问题:stackoverflow.com/questions/4356758/…
-
叹息...我希望那是在 2.0 中
-
看我对这个问题的回答,基本上是同一个问题:stackoverflow.com/questions/22343187/…
标签: powershell