about_Booleans

about_Booleans

앞으로 PowerShell에서 Boolean(참/거짓) 값이 어떻게 다뤄지고, 다른 타입이 어떻게 Boolean으로 바뀌는지 함께 살펴볼게요. 이 규칙을 알면 if나 조건문을 쓸 때 결과를 훨씬 쉽게 예상할 수 있어요.

출처: Microsoft Learn — about_Booleans

본문

간단한 설명 (Short description)

boolean 식이 어떻게 평가되는지 설명해요.

자세한 설명 (Long description)

PowerShell은 어떤 타입이든 암시적으로 Boolean으로 취급할 수 있어요. 그래서 다른 타입을 Boolean 값으로 변환할 때 PowerShell이 적용하는 규칙을 이해하는 게 중요해요.

스칼라 타입에서의 변환

스칼라 타입은 한 번에 하나의 값만 담을 수 있는 원자적인(atomic) 양이에요. 다음 타입들은 $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

참고로 이건 *명시적 문자열 구문 분석(explicit string parsing)*과는 달라요:

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

  • 요소가 하나인 컬렉션은 그 단일 요소의 Boolean 값으로 평가돼요.

  • 요소가 2개 이상인 컬렉션은 항상 $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

더 알아보기