about_Booleans

PowerShell 可将任何类型隐式视为 布尔值。 务必要了解 PowerShell 用于将其他类型转换为 布尔 值的规则。

从标量类型转换

标量类型是一种原子数量,一次只能保存一个值。 以下类型的计算结果为 $false

  • 空字符串(如 '' 或) ""
  • 空值,例如 $null
  • 值为的任何数值类型 0

示例:

PS> $false -eq ''
True
PS> if ("") { $true } else { $false }
False
PS> if ($null) { $true } else { $false }
False
PS> if ([int]0) { $true } else { $false }
False
PS> if ([double]0.0) { $true } else { $false }
False

以下类型的计算结果为 $true

  • 非空字符串
  • 任何其他非集合类型的实例

示例:

# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True

请注意,这不同于 显式字符串分析

PS> [bool]::Parse('false')
False
PS> [bool]::Parse('True')
True
PS> [bool]::Parse('Not True')
MethodInvocationException: Exception calling "Parse" with "1" argument(s):
"String 'Not True' was not recognized as a valid Boolean."

从集合类型转换

在 PowerShell 中,数组是最常用的集合类型。 这些规则适用于实现 IList 接口的任何集合类型。

  • 空集合始终是 $false
  • 特殊的 null 值,指示是否缺少命令的输出 [System.Management.Automation.Internal.AutomationNull]::Value $false
  • 单元素集合的计算结果为其一个和唯一一个元素的 布尔 值。
  • 具有多个元素的集合始终为 $true

示例:

# Empty collections
PS> [bool]@()
False
PS> [bool](Get-ChildItem | Where-Object Name -eq 'Non-existent-File.txt')
False
# Single-element collections
PS> $a = @(0)
PS> [bool]$a
False
PS> $b = @(1)
PS> [bool]$b
True
# Multi-element collections
PS> $c = @(0,0)
PS> [bool]$c
True

另请参阅