about_Booleans

Krátký popis

Popisuje, jak se vyhodnocují logické výrazy.

Dlouhý popis

PowerShell může implicitně zacházet s libovolným typem jako s logickou hodnotou. Je důležité pochopit pravidla, která PowerShell používá k převodu jiných typů na logické hodnoty.

Převod ze skalárních typů

Skalární typ je atomické množství, které může obsahovat pouze jednu hodnotu najednou. Následující typy se vyhodnocují takto $false:

  • Prázdné řetězce jako '' nebo ""
  • Hodnoty null, jako je $null
  • Libovolný číselný typ s hodnotou 0

Příklady:

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

Následující typy se vyhodnocují takto $true:

  • Neprázdné řetězce
  • Instance jakéhokoli jiného typu než kolekce

Příklady:

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

Všimněte si, že se liší od explicitního parsování řetězců:

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."

Převod z typů kolekcí

Pole jsou nejběžnějším typem kolekce v PowerShellu. Tato pravidla platí pro všechny typy podobné kolekci, které implementují rozhraní IList .

  • Prázdné kolekce jsou vždy $false
  • Speciální hodnota null označující nepřítomnost výstupu z příkazu, [System.Management.Automation.Internal.AutomationNull]::Value je vždy $false.
  • Kolekce s jedním prvkem se vyhodnocují jako logická hodnota jejich jednoho a jediného prvku.
  • Kolekce s více než 1 prvkem jsou vždy $true.

Příklady:

# 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

Viz také