Поделиться через


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

См. также раздел