PowerShell의 널 변수
PowerShell은 $Null 객체를 null 값으로 처리하며, 일부 명령은 출력을 생성해야 합니다. 오류가 발생하면 해당 값이 null로 생성되며, 또한 스크립트에서 명령이 값을 생성하는지 확인하는 데 도움이 될 수 있습니다.
이 기사는 null 변수, PowerShell의 다양한 문법에서 null 변수 사용의 영향 및 null 값을 확인하는 방법에 대해 설명합니다.
PowerShell의 Null 변수 소개
NULL을 미지의 값 또는 빈 값으로 생각할 수 있습니다. 예를 들어, 변수가 값이나 객체를 할당할 때까지 NULL입니다.
이 변수가 중요할 수 있는 이유는 일부 명령이 값을 요구하고 값이 NULL이면 실패하기 때문입니다.
$null 변수는 PowerShell에서 NULL을 나타내는 데 사용되는 자동 변수입니다. 변수에 할당하거나 비교에 사용할 수 있으며, 컬렉션의 NULL 자리 표시자로 사용할 수 있습니다.
PowerShell은 $null을 NULL 값을 가진 객체로 처리합니다. 따라서 이 변수는 다른 언어에서 온 경우 예상하는 것과 다를 수 있습니다.
PowerShell에서 Null 변수의 영향
$null 값의 동작은 코드 내에서 나타나는 위치에 따라 달라질 수 있습니다. NULL 변수가 PowerShell 스크립팅의 다양한 측면에 어떤 영향을 미치는지 살펴봅시다.
문자열에 대한 영향
문자열에서 $null을 사용하면 빈 문자열(또는 공백 값)이 됩니다.
$value = $null
Write-Output "The value is $value."
출력:
The value is .
스크립트의 명확성을 유지하려면 특히 변수의 값이 문자열 끝에 있는 경우 로그 메시지에서 변수를 괄호([])로 묶어 사용하는 것이 좋습니다.
$value = $null
Write-Output "The value is [$value]"
출력:
The value is []
이 관행은 빈 문자열과 $null 값을 구분하는 데 도움이 됩니다.
수치 방정식에 대한 영향
숫자 방정식에서 $null 변수를 사용하면 오류가 발생하지 않는 경우 결과가 유효하지 않습니다. 때때로 $null 변수는 0으로 평가되거나 전체 결과를 $null로 만들 수 있습니다.
곱셈을 포함하는 이 예를 고려해 보십시오. 이 예는 값의 순서에 따라 0 또는 $null을 생성합니다.
$null * 5
$null -eq ( $null * 5 )
출력:
True
컬렉션에 대한 영향
컬렉션은 인덱스를 사용하여 값에 접근할 수 있게 해줍니다. null 컬렉션에 인덱스를 시도하면 "Cannot index into a null array" 오류가 발생합니다.
$value = $null
$value[10]
출력:
Cannot index into a null array.
At line:2 char:1
+ $value[10]
+ ~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
그러나 컬렉션이 있고 컬렉션에 존재하지 않는 요소를 검색하려고 시도하면 $null 결과를 받게 됩니다.
$array = @( 'one', 'two', 'three' )
$null -eq $array[100]
출력:
True
객체에 대한 영향
지정된 속성이 없는 객체의 속성이나 하위 속성에 접근하려고 하면 정의되지 않은 변수와 마찬가지로 $null 변수를 얻을 수 있습니다. 이 경우 값이 $null이든 실제 객체이든 관계가 없습니다.
$null -eq $undefined.not.existing
출력:
True
메서드에 대한 영향
$null 변수에서 메서드를 호출하면 RuntimeException 예외가 발생합니다.
$value = $null
$value.toString()
출력:
You cannot call a method on a null valued expression.
At line:2 char:1
+ $value.toString()
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
"You cannot call a method on a null valued expression"라는 문구를 만나면, $null 값을 확인하지 않고 변수에서 메서드가 호출되는 곳을 코드에서 점검하라는 신호입니다.
PowerShell에서 Null 값 확인하기
PowerShell에서 Null 값을 확인하기 위해 비교 연산자 -eq 및 -ne 사용
PowerShell에서 $null 값을 확인할 때는 비교의 왼쪽에 $null 변수를 배치하는 것이 모범 사례입니다. 이러한 작문 스타일은 의도적일 뿐만 아니라 PowerShell 모범 사례로 인정받고 있습니다.
그러나 $null을 오른쪽에 배치할 경우 예상치 못한 결과를 가져오는 경우가 있습니다. 다음 코드를 살펴보고 결과를 예측해 봅시다:
if ( $value -eq $null ) {
    'The array is $null'
}
if ( $value -ne $null ) {
    'The array is not $null'
}
$value를 정의하지 않으면 첫 번째 조건이 $true로 평가되고, 메시지는 The array is $null이 됩니다. 여기서의 주의점은 두 결과가 각각 $false가 가능하도록 $value를 생성하는 것이 가능하다는 것입니다.
출력:
The array is $null
이 경우, $value 변수는 $null을 포함하는 배열입니다.
-eq 연산자는 배열 내의 모든 값을 확인하고 일치하는 $null을 반환하여 $false로 평가합니다. 유사하게 -ne 연산자는 $null 값과 일치하지 않는 모든 것을 반환하여 결과가 없고(또한 $false로 평가됨) 됩니다.
따라서 두 조건 모두 $true가 아니며, 그 중 하나가 $true가 될 것으로 예상되었을지라도 그렇지 않습니다.
PowerShell에서 Null 값을 확인하기 위해 -not 연산자 사용
-not 연산자는 조건을 반대로 하는 PowerShell의 논리 연산자입니다. 변수에 적용하면 변수가 null이 아닌지 확인합니다.
$myVariable = $null
if (-not $myVariable) {
    Write-Host "The variable is null."
}
이 코드 스니펫에서 $myVariable이라는 변수를 null 값으로 초기화했습니다. -not 연산자가 if 문에서 사용되어 $myVariable이 null이 아닌지 확인합니다.
조건이 참일 경우 스크립트는 if 문 내의 코드 블록을 실행합니다.
출력:
The variable is null.
출력에서 보듯이 스크립트는 $myVariable이 null임을 인식하고 "The variable is null"라는 메시지를 출력합니다.
PowerShell에서 Null 값을 확인하기 위해 IsNullOrEmpty() 메서드 사용
IsNullOrEmpty()는 System.String 클래스의 메서드이며, 기본 PowerShell 메서드는 아닙니다. 서로 다른 데이터 유형은 null 또는 빈 값을 확인하는 다양한 방법이 있을 수 있습니다.
이 코드에서는 $myString이라는 변수를 만들고 null 또는 빈 문자열을 나타내는 $null 값을 할당합니다.
[string]::IsNullOrEmpty($myString) 메서드를 사용하여 $myString이 null이거나 빈 문자열인지 확인합니다. 이 메서드는 .NET 프레임워크의 [string] 클래스의 일부로, 문자열이 null이거나 빈 문자열인지 결정하는 데 사용됩니다.
$myString이 실제로 null이거나 비어 있다면, 조건이 true이고 스크립트는 "The string is null or empty."라는 메시지를 출력합니다.
$myString = $null
if ([string]::IsNullOrEmpty($myString)) {
    Write-Host 'The string is null or empty.'
}
출력:
The string is null or empty.
$myString이 $null 값을 할당받았기 때문에, 조건이 true이며 메시지가 출력됩니다.
PowerShell에서 Null 값을 확인하기 위해 IsNullOrWhiteSpace() 메서드 사용
IsNullOrWhiteSpace()는 .NET 프레임워크의 System.String 클래스에서 사용할 수 있는 유용한 메서드로, PowerShell에서는 문자열 변수에서 호출하여 사용할 수 있습니다.
이 메서드는 문자열이 null이거나 빈 문자열이거나 공백 문자만으로 구성되어 있는지를 확인합니다. 문자열 변수가 실질적으로 비어 있는지를 확인하는 데 유용합니다. 공백이나 탭만 포함되어 있을 때도 마찬가지입니다.
아래 코드에서는 $myString이라는 변수를 만들고 공백 문자(스페이스)만 포함된 문자열을 할당합니다.
그런 다음 [string]::IsNullOrWhiteSpace($myString) 메서드를 사용하여 $myString이 null인지 또는 공백만 포함하는지를 확인합니다.
$myString = $null
if ([string]::IsNullOrWhiteSpace($myString)) {
    Write-Host 'The string is null or contains only whitespace.'
}
출력:
The string is null or contains only whitespace.
조건이 true이므로 ($myString이 null) 스크립트는 "The string is null or contains only whitespace."라는 메시지를 출력합니다.
이 메서드는 문자열이 진정으로 비어 있는지 확인하려고 할 때 유용합니다. 공백이나 탭으로 인해 "빈" 것으로 보일 수 있습니다.
결론
PowerShell 스크립팅에서 $null 변수가 작동하는 방식을 이해하는 것은 중요합니다. 왜냐하면 이러한 변수는 다양한 상황에서 스크립트의 작동에 영향을 미칠 수 있기 때문입니다. 신뢰할 수 있는 스크립트를 작성하려면 $null을 왼쪽에 배치하여 null 값을 올바르게 확인하는 것과 같은 모범 사례를 따르는 것이 좋습니다.
스크립팅에 익숙한 사람이든 초보자든 이러한 세부 사항을 아는 것은 PowerShell 사용 능력을 향상시키는 데 도움이 됩니다.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn