PowerShell에서 값을 반환하는 방법

일반적으로 return
키워드는 함수, 스크립트 또는 스크립트 블록을 종료합니다. 예를 들어, 특정 시점에서 범위를 벗어나거나, 값을 반환하거나, 범위의 끝에 도달했음을 나타내기 위해 사용할 수 있습니다.
그러나 Windows PowerShell에서 return
키워드를 사용하면 예상하지 못한 출력이 스크립트에서 인쇄될 수 있어 약간 혼란스러울 수 있습니다.
이 문서에서는 return
키워드의 작동 방식과 Windows PowerShell에서 이를 올바르게 사용하는 방법에 대해 논의할 것입니다.
PowerShell에서 return
키워드 사용하기
아래 스크립트 블록은 return
키워드의 구문 기본 형식입니다.
return <expression>
return
키워드는 단독으로 나타날 수 있으며, 그 뒤에 값 또는 표현식이 올 수 있습니다. 단독으로 사용된 return
키워드는 명령 줄을 이전 호출 지점으로 되돌립니다.
return
return $a
return (1 + $a)
아래의 예제는 특정 시점에서 조건이 충족될 경우 함수를 종료하기 위해 return
키워드를 사용하는 것입니다. 이 예제에서는 반환 문이 실행될 수 있는 문장 이전에 있기 때문에 홀수는 곱해지지 않습니다.
function MultiplyOnlyEven {
param($num)
if ($num % 2) { return "$num is not even" }
$num * 2
return
}
1..10 | ForEach-Object { MultiplyOnlyEven -Num $_ }
출력:
1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20
Windows PowerShell은 보다 원주율적인 프로그래밍 관점에서 볼 때 혼란스러운 반환 의미론을 가지고 있습니다. 우리가 고려해야 할 두 가지 주요 아이디어는 다음과 같습니다:
- 모든 출력은 캡처되어 반환됩니다.
- return 키워드는 논리적 종료 지점을 나타냅니다.
이러한 내용에 비추어 볼 때, 다음 두 개의 스크립트 블록은 $a
변수의 값을 반환합니다.
표현식이 있는 return 키워드:
$a = "Hello World"
return $a
표현식이 없는 return 키워드:
$a = "Hello World"
$a
return
두 번째 스크립트 블록에서도 return
키워드는 필요하지 않으며, 명령 줄에서 변수를 호출하는 것만으로도 해당 변수를 명시적으로 반환할 수 있습니다.
PowerShell에서 파이프라인의 반환 값
스クリプ트 블록이나 함수에서 값을 반환할 때, Windows PowerShell은 자동으로 구성원을 제거하고 그들을 하나씩 파이프라인에 추가합니다. 이러한 사용 사례의 이유는 Windows PowerShell의 일회성 처리 때문입니다.
다음 함수는 이 아이디어를 보여주며 숫자 배열을 반환합니다.
function Test-Return {
$array = 1, 2, 3
return $array
}
Test-Return | Measure-Object | Select-Object Count
출력:
Count
-----
3
Test-Return
cmdlet을 사용할 때, 아래 함수의 출력은 Measure-Object
cmdlet에 파이프됩니다. cmdlet은 파이프라인의 객체 수를 계산하며, 실행 시 반환된 수는 셋입니다.
스크립트 블록이나 함수가 파이프라인에 단일 객체만 반환하도록 하려면 다음 방법 중 하나를 사용하십시오:
PowerShell에서 단항 배열 표현식 활용하기
단항 표현식을 활용하면 반환 값을 하나의 객체로 파이프라인으로 보낼 수 있습니다. 다음 예제에서 보여줍니다.
function Test-Return {
$array = 1, 2, 3
return (, $array)
}
Test-Return | Measure-Object | Select-Object Count
출력:
Count
-----
1
PowerShell에서 NoEnumerate
매개변수를 가진 Write-Output
사용하기
우리는 -NoEnumerate
매개변수를 가진 Write-Output
cmdlet을 사용할 수 있습니다. 아래 예제는 return
키워드로 샘플 함수에서 파이프라인으로 보낸 객체를 계산하기 위해 Measure-Object
cmdlet을 사용합니다.
예제 코드:
function Test-Return {
$array = 1, 2, 3
return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count
출력:
Count
-----
1
파이프라인이 단일 객체만 반환하도록 강제하는 또 다른 방법은 PowerShell 버전 5에서 도입되었으며, 이에 대해서는 다음 섹션에서 논의할 것입니다.
PowerShell 5에서 클래스 정의하기
Windows PowerShell 버전 5.0으로, 이제 사용자 정의 클래스를 생성하고 정의할 수 있습니다. 함수를 클래스으로 변경하고, return
키워드는 그 즉시 앞에 있는 단일 객체만 반환합니다.
예제 코드:
class test_class {
[int]return_what() {
Write-Output "Hello, World!"
return 1000
}
}
$tc = New-Object -TypeName test_class
$tc.return_what()
출력:
1000
위의 클래스가 함수인 경우, 파이프라인에서 저장된 모든 값을 반환합니다.
출력:
Hello World!
1000
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn