То, что вы ищете, это тема about_Automatic_Variables
, где описаны переменные $true
и $false
.
Я написал это как ответ, потому что хотелчтобы указать на «поймал», я столкнулся с этими значениями: 0
и 1
равны $false
и $true
соответственно.
$false -eq 0 # => True
$false -eq $null # => False - not false-y?
$true -eq 1 # => True
$true -eq 2 # => True - appears to be truth-y
Между тем строка 'false'
не является.
$false -eq 'False' # => False
Также по какой-то причине $false
равно пустой строке:
$false -eq '' # => True
$false -eq [string]::Empty # => True
В то время как строка 'true'
IS равна $true
(действительно, любое ненулевое число и любая непустая строка):
$true -eq 'True' # => True
В процессе написания этого ответа я понял, что многие $true
сравнения оцениваются как True
, поэтому можно предположить, что сравнения с константами bool являются true-y / false-y.
Вот значения, которые сравниваются с $false
(что делает следующие сравнения возвращаемыми $true
):
$false -eq '' # Empty string
$false -eq 0 # Zero
$false -eq @() # Empty array
Единственное обнаруженное мной сравнение, которое провалило оба теста, это $null
(т.е. не на 100% ложь-у):
$false -eq $null # => False
$true -eq $null # => False
Вкл.Последний пример крайнего случая, который оценивается как $false
в некоторых других языках, является пустым [hashtable]
(или словарем):
$true -eq @{} # => True
Суммируя, что @ Joey указано в комментариях:
╦═════════════════════╦═════════════════════════╗
║ Falsy ║ Truthy ║
╠═════════════════════╬═════════════════════════╣
║ 0 ║ Non-0 ║
║ @() ║ @(1) ║
║ @(0) ║ @(0, 1) ║
║ [string]::Empty ║ Non-empty string ║
║ $false ║ $true ║
║ 0-backed enum value ║ Any non-0 enum value ║
║ $null ║ Any non-$null reference ║
╚═════════════════════╩═════════════════════════╝