HOWTO · PowerShell
检查 PowerShell 中的 Null 值
了解 PowerShell 的 $null 自动变量代表什么、它在表达式和集合中的行为,以及该使用哪种比较或字符串检查。
本页内容
要检查 PowerShell 值是否为 null,请将 $null 放在左侧进行比较:$null -eq $value。反向检查可使用 -ne。这种显式比较能区分 null 与 $false、0 和空字符串等值;这些值在条件判断中也可能表现为假。
PowerShell 中 Null 变量简介
$null 是 PowerShell 表示 null 值的自动变量。它本身是一个值,可以赋值、比较或放入集合;它不表示字符串为空,也不表示所有未赋值变量都具有“未知”值。在通常模式下,读取未赋值变量会得到 $null;严格模式可能改变读取时的处理方式。
命令发生错误通常不表示它返回了 $null。排查问题时,请查看命令文档中说明的结果和错误行为,然后检查实际收到的值。需要对象、集合或字符串的操作遇到 null 时可能失败,因此在使用该值前显式检查,有助于更快定位原因。
PowerShell 中 Null 变量的影响
$null 的影响取决于表达式和该值的类型。在插值字符串中,$null 不会贡献任何字符。像 "Value: [$value]" 这样的字符串中的方括号会让该位置显示为 [];它们不会把 null 转换成另一种值。
数值表达式可能根据运算符和上下文将 null 强制转换或继续传播。不要假设所有表达式都会得到同一个数值结果;请检查相关运算,并在计算前验证输入。
处理集合时也要区分不同情况。对 null 集合进行索引,与访问现有数组的越界索引并不相同。前者可能产生错误;在常见的 PowerShell 使用场景中,后者通常会得到 $null。如果脚本需要区分这两种情况,请在索引前检查集合本身及索引边界。
对于对象,在严格模式以外,读取不存在的属性通常会得到 $null。一个确实存在但值为 null 的属性,在简单的 null 比较中结果相同;如果需要区分这两种情况,请另外检查对象的结构。对 $null 调用方法会失败,因为没有对象可以接收该调用。排查此类问题时,请检查方法调用前的值;具体错误措辞可能因 PowerShell 版本和上下文而异。
在 PowerShell 中检查 Null 值
使用比较运算符 -eq 和 -ne 检查 PowerShell 中的 Null 值
检查单个值时,请将 $null 放在 -eq 或 -ne 的左侧。这样可以避免集合比较改变结果:数组位于左侧时,-eq 和 -ne 可能返回匹配的数组元素,而不是单个布尔值。因此,包含 null 的数组在 if 条件中的表现可能不同于标量值。将 $null 放在左侧时,比较表达式询问的是该值本身是否为 null。
运行此示例。请注意,示例中可见的输出标签仍为英文,代码块保持不变:
$value = 'ready'
if ($null -eq $value) {
Write-Output 'Value is null.'
} else {
Write-Output 'Value is present.'
}
使用 -not 运算符检查 PowerShell 中的 Null 值
-not 检查表达式是否为假值,而不是专门检查它是否为 $null。它也可能匹配 $false、数值零、空字符串或空集合。如果你需要的是这种更宽泛的条件,可以使用它;如果要专门判断某个值是否为 null,请使用 $null -eq $value。
使用 IsNullOrEmpty() 方法检查 PowerShell 中的 Null 值
对于字符串,[string]::IsNullOrEmpty($text) 是一个 .NET 字符串方法;当参数为 null 或长度为零时,它会返回 true。字符串只包含空格时,它不会匹配。如果缺失的字符串和空字符串都应视为没有文本,可以使用此检查;它并非适用于任意 PowerShell 值的通用检查。
使用 IsNullOrWhiteSpace() 方法检查 PowerShell 中的 Null 值
[string]::IsNullOrWhiteSpace($text) 会匹配 null、空字符串,以及仅由空白字符组成的字符串。如果只含空白字符的输入也应视为空白,请选择此方法。例如,在调用该方法前将 $text = ' ',检查的是仅含空白字符的输入;赋值为 $null 则检查它对 null 的处理。
结论
直接检查 null 时使用 $null -eq $value;当值必须存在时使用 $null -ne $value。只有在要检查真值状态时才选择 -not;选择字符串方法时,则根据空文本或仅含空白字符的文本是否应视为空白来决定。在索引或调用方法前检查值,有助于将 null 输入与其他故障区分开来。