在 Powershell 中,
if($variable)
测试什么? 这是测试变量是否已设置、为 null、为 true 还是其他什么?
它测试变量是否为 true 或者非布尔变量是否可以合并为 true。 例如,其中每一个都返回 false:
$var #uninitialized
$var = ""
$var = $false
$var = 0
$var = @() # empty array
其中每一个都返回 true:
$var = "something"
$var = $true
$var = 1 #or any non-zero number
$var = @{} # empty hashtable
Powershell 使用松散类型,作为其中的一部分,任何值都可以用作条件表达式。将值评估为 true 或 false(此类值通常称为“true”和“falsey”)的逻辑位于 System.Management.Automation.LanguagePrimitives.IsTrue 函数中。逻辑如下:
$null
评估结果为 false。$true
和 $false
有其通常的含义。function Test
{
param ( [switch]$Option )
}
Test # $Option evaluates to false
Test -Option # $Option evaluates to true
# (Technically, $Option is not bool; it is of type SwitchParameter which,
# for almost all intents and purposes, can be used interchangeably with bool.)
IList
)使用以下逻辑:空集合是假的;仅包含一个元素的集合评估其成员的真值;包含两个或多个元素的集合是真实的。有几个问题:
[System.Management.Automation.LanguagePrimitives]::IsTrue([char]0)
返回True(根据最后一个子句);然而 if([char]0) { "Truthy" } else { "Falsey" }
返回“Falsey”。我无法找到发生这种情况的原因。$array = New-Object -TypeName System.Object[] 1 # $array = new object[1]
$array[0] = $array
if($array) { "Truthy" } else { "Falsey" }
(答案是:它会因 StackOverflowException 导致进程崩溃。)