about_Booleans
简短说明
介绍了如何评估布尔表达式。
长说明
PowerShell 可以隐式地将任何类型视为布尔值。 了解 PowerShell 用于将其他类型转换为布尔值的规则非常重要。
从标量类型转换
标量类型是一个原子数量,一次只能保存一个值。 以下类型的评估结果为 $false
:
- 空字符串,例如
''
或""
- null 值,例如
$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
。 - 单元素集合的评估结果是其唯一元素的布尔值。
- 包含 1 个以上元素的集合始终为
$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