PowerShell에서 값을 반환하는 방법

  1. PowerShell에서 return 키워드 사용하기
  2. PowerShell에서 파이프라인의 반환 값
  3. PowerShell 5에서 클래스 정의하기
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은 보다 원주율적인 프로그래밍 관점에서 볼 때 혼란스러운 반환 의미론을 가지고 있습니다. 우리가 고려해야 할 두 가지 주요 아이디어는 다음과 같습니다:

  1. 모든 출력은 캡처되어 반환됩니다.
  2. 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
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn