You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Powershell中nothing与$null的区别、区分方法及变量创建问题

PowerShell中$null和nothing的区别

我们常说的nothing本质是PowerShell特有的自动化空值:[System.Management.Automation.Internal.AutomationNull]::Value,代表「没有任何输出结果」。

PowerShell为了兼容做了特殊处理,AutomationNull在绝大多数普通比较、方法调用场景下和$null表现完全一致,比如你示例中$null -eq $n返回True、调用GetType()都会报空引用错误,都是这个原因。二者只有在枚举类场景(数组构造、数组拼接、管道输入)下才会体现出核心差异:

  • $null是实实在在的空引用对象,会被当作单独的一个元素参与枚举
  • AutomationNull代表「不存在结果」,参与枚举时相当于没有内容,不会被当作元素计数

问题1:无需构造数组,如何判断变量是nothing还是$null

直接用[AutomationNull]的静态值做相等判断即可,注意必须把静态值放在比较符左侧,待判断变量放在右侧,避免数组枚举带来的判断异常:

# 返回True代表是nothing,返回False代表是$null
[System.Management.Automation.Internal.AutomationNull]::Value -eq $待判断变量

对应你的测试代码,判断结果如下:

[System.Management.Automation.Internal.AutomationNull]::Value -eq $n # 输出True
[System.Management.Automation.Internal.AutomationNull]::Value -eq $c # 输出False

问题2:不使用自定义Get-Nothing函数,如何创建值为nothing的变量

方法1:直接赋值静态值

最直接的方式就是直接给变量赋值AutomationNull的静态实例:

$n = [System.Management.Automation.Internal.AutomationNull]::Value

方法2:赋值无输出的执行结果

只要给变量赋值一个没有任何输出的执行结果,得到的就是nothing,例如:

# 执行空脚本块,无任何输出
$n = & {}
# 或者用过滤不到任何结果的管道
$n = 1,2,3 | Where-Object { $_ -gt 10 }

以上两种方法得到的$n,和你示例中Get-Nothing返回的结果完全一致。


内容的提问来源于stack exchange,提问作者joeking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:18:02