HOWTO · PowerShell
PowerShell의 불리언 값
이 기사에서는 불리언 값이 무엇인지, 그리고 Windows PowerShell 환경 내에서 이를 어떻게 사용할 수 있는지 설명합니다.
이 페이지의 내용
PowerShell은 $true와 $false로 부울 값을 나타냅니다. 비교와 명령으로 이 값을 만들 수 있으며, 논리 연산자로 결합하거나 if 문을 제어하는 데 사용할 수 있습니다.
PowerShell의 부울 값
부울 값은 참과 거짓, 두 가지 논리 상태 중 하나를 나타냅니다. PowerShell에서 기본 부울 리터럴은 $true와 $false입니다. PowerShell은 이 값을 True와 False로 표시하지만, 화면에 표시되는 단어가 따옴표로 묶인 문자열인 것은 아닙니다. 예를 들어 $true는 부울 값이고, "True"는 문자열입니다. 마찬가지로 1과 0은 기본 부울 값이 아니라 숫자입니다. 필요한 경우 스크립트에서 값을 명시적으로 변환할 수 있지만, 조건에는 부울 리터럴을 사용하는 편이 더 명확합니다.
비교와 명령으로 부울 값을 만들 수 있으며, 스크립트는 그 결과에 따라 동작을 선택할 수 있습니다. 비교에는 -eq(같음), -ne(같지 않음) 같은 연산자를 사용합니다. 논리 연산자는 부울 식을 결합하거나 반전합니다. 아래 예제는 PowerShell이 값을 표시하는 방식을 보여 줍니다.
값 비교와 조건 결합
비교 연산자는 부울 결과를 만듭니다. 다음 연산자는 값을 비교합니다. -eq는 같은지, -ne는 다른지 확인합니다. -gt는 초과, -lt는 미만, -ge는 이상, -le는 이하를 뜻합니다. PowerShell의 비교 연산자는 문자열도 비교할 수 있으며, 기본 문자열 비교에서는 대소문자를 구분하지 않습니다. 대소문자를 구분해 같은지 비교하려면 -ceq를 사용합니다.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
$score = 84
$name = "Ava"
$hasName = $name -ne ""
$passed = ($score -ge 70) -and $hasName
$needsReview = -not $passed
Write-Output (10 -eq 10)
Write-Output (10 -ne 8)
Write-Output (10 -gt 8)
Write-Output (10 -lt 8)
Write-Output (10 -le 10)
Write-Output (10 -ge 10)
Write-Output ($true -and $false)
Write-Output ($true -or $false)
Write-Output $needsReview
if ($passed) {
Write-Output "Ava passed."
} else {
Write-Output "Ava did not pass."
}
True
True
True
False
True
True
False
True
False
Ava passed.
처음 여섯 줄은 비교 연산자와 그 부울 결과를 보여 줍니다. 논리 연산자 -and는 두 피연산자가 모두 참일 때만 참이고, -or는 하나 이상의 피연산자가 참이면 참입니다. -not는 부울 값을 반전하므로 $passed가 참이면 $needsReview는 거짓입니다. 괄호를 사용하면 어떤 비교식이 결합되는지 분명해집니다. 이 예제에서 $passed에는 부울 식이 저장되고, if 문은 그 값을 사용해 실행할 분기를 선택합니다.
PowerShell 명령에서 부울 결과 얻기
일부 명령은 부울 값을 직접 반환합니다. Test-Path는 지정한 경로가 있으면 $true를, 없으면 $false를 반환합니다. 결과는 현재 컴퓨터와 확인하는 경로에 따라 달라지므로, 특정 Windows 디렉터리가 모든 시스템에 있다고 가정하지 마세요. 예를 들어 Test-Path -Path $env:TEMP의 결과를 변수에 저장하면 현재 환경에 지정된 임시 디렉터리를 확인할 수 있습니다.
Test-Connection은 -Quiet와 함께 사용하면 부울 결과를 반환할 수 있습니다. 예를 들어 $reachable = Test-Connection -ComputerName "example.com" -Count 2 -Quiet는 연결 시도에 대상이 응답했는지를 저장합니다. 네트워크 연결, DNS, 방화벽 규칙, 원격 구성 및 PowerShell 버전에 따라 결과나 명령 동작이 달라질 수 있으므로, 한 컴퓨터에서 얻은 결과가 어디서나 같다고 보장할 수는 없습니다. 버전별 동작이 중요하다면 스크립트를 실행할 시스템에서 해당 명령의 도움말을 확인하세요.
명령은 단일 부울 값 대신 텍스트나 개체를 출력할 수도 있습니다. 명령 출력을 조건에 사용할 때는 결과가 하나인지 여러 개인지 확인하세요. 컬렉션의 참·거짓 판정과 파이프라인 동작이 조건에 영향을 줄 수 있습니다. 작업에 부울 응답이 필요하다면 -Quiet 같은 명령 옵션을 사용하는 편이 좋습니다.
스크립트에서 부울 값 사용하기
조건을 다시 사용할 예정이라면 비교나 명령의 결과를 의미가 분명한 변수에 저장하세요. 예를 들어 $isAvailable = Test-Path -Path $env:TEMP는 확인 결과를 저장하고, if ($isAvailable) { ... }는 그 결과에 따라 동작을 선택합니다. 모든 전제 조건이 충족되어야 하는 작업에는 조건을 결합하면 유용합니다. 예: $isReady -and $hasPermission. 둘 중 하나만 충족되어도 된다면 -or를 사용하고, 조건이 거짓일 때 스크립트가 동작해야 한다면 -not를 사용하세요.
PowerShell은 부울 값과 숫자 값을 서로 다른 것으로 취급합니다. 1을 $true로, 0을 $false로 설명하지 마세요. 특정 API, 파일 형식 또는 외부 시스템은 참·거짓 필드를 숫자나 텍스트로 표현할 수 있지만, 그 표현 방식은 해당 인터페이스에만 해당합니다. 암묵적인 가정에 의존하지 말고 데이터 경계에서 값을 변환하거나 검증하세요. 이 차이를 이해하면 예상치 못한 비교를 피하고 스크립트의 의도를 더 명확히 전달할 수 있습니다.
결론
PowerShell의 $true와 $false는 부울 상태를 나타냅니다. -eq, -ne, -gt, -lt, -le, -ge 같은 비교 연산자는 부울 결과를 만들고, -and, -or, -not는 결과를 결합하거나 반전합니다. Test-Path와 Test-Connection -Quiet 같은 명령도 부울 결과를 제공할 수 있으며, 그 의미는 확인하는 경로나 환경에 따라 달라집니다. 결과를 이해하기 쉬운 이름의 변수에 저장하고 조건에 사용해 스크립트 흐름을 제어하세요. 특히 외부 시스템과 데이터를 주고받을 때 부울 값과 문자열 및 숫자를 구분해야 합니다.