about_Booleans

Descripción breve

Describe cómo se evalúan las expresiones booleanas.

Descripción larga

PowerShell puede tratar implícitamente cualquier tipo como booleano. Es importante comprender las reglas que PowerShell usa para convertir otros tipos en valores booleanos .

Conversión de tipos escalares

Un tipo escalar es una cantidad atómica que solo puede contener un valor a la vez. Los siguientes tipos se evalúan como $false:

  • Cadenas vacías como '' o ""
  • Valores NULL como $null
  • Cualquier tipo numérico con el valor de 0

Ejemplos:

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

Los siguientes tipos se evalúan como $true:

  • Cadenas no vacías
  • Instancias de cualquier otro tipo que no sea de colección

Ejemplos:

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

Tenga en cuenta que esto difiere del análisis explícito de cadenas:

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

Conversión de tipos de colección

Las matrices son el tipo de colección más común en PowerShell. Estas reglas se aplican a cualquier tipo de colección que implemente la interfaz IList .

  • Las colecciones vacías siempre son $false
  • El valor null especial que indica la ausencia de salida de un comando, [System.Management.Automation.Internal.AutomationNull]::Value siempre $falsees .
  • Las colecciones de elementos únicos se evalúan como el valor booleano de su único elemento y .
  • Las colecciones con más de 1 elemento siempre $trueson .

Ejemplos:

# 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

Consulte también