문제

PowerShell에서 다소 이상한 동작이 보입니다. 사용자 지정 함수를 예상한 대로 평가하려면 "괄호 래퍼"가 필요한 것 같습니다.간단한 PowerShell 함수를 사용하면 다음과 같습니다.

function Return-True { return $true }

그런 다음 이를 호출하는 몇 가지 샘플 코드를 살펴보겠습니다.

PS C:\> Return-True
True
PS C:\> Return-True -eq $false
True
PS C:\> (Return-True) -eq $false
False

아이디어?코멘트?

도움이 되었습니까?

해결책

PowerShell이 ​​토큰을 볼 때 Return-True 이를 명령으로 식별하고 명령문이 평가되거나 끝날 때까지 다른 모든 것은 함수에 전달되는 인수입니다. Return-True.

다음을 수행하면 실제로 이를 확인할 수 있습니다.

PS > function Return-True { "The arguments are: $args"; return $true }
PS > Return-True -eq $false
The arguments are: -eq False
True

이것이 바로 다음의 모든 항목이 'True'를 반환하는 이유입니다. 왜냐하면 여러분이 보고 있는 모든 것은 호출의 결과이기 때문입니다. Return-True 다양한 주장으로:

PS > Return-True -eq $false
True
PS > Return-True -ne $false
True
PS > Return-True -eq $true
True
PS > Return-True -ne $true
True

사용 (Return-True) PowerShell이 ​​함수를 인수 없이 평가하도록 강제합니다.

다른 팁

두 번째 줄은 부울 평가를 수행하지 않습니다. 현으로 똑같은 일을하면 어떻게되는지보십시오.

PS C:\> function Return-True { return "True string" }
PS C:\> Return-True
True string
PS C:\> Return-True -eq "False string"
True string
PS C:\> (Return-True) -eq "False string"
False

두 번째 줄은 단순히 함수의 값을 반환하고 비교하지 않는 것입니다. 왜이 동작이 일어나고 있는지 정확히 잘 모르겠지만, "true"및 "false"로 변환되는 부울 값을 사용할 때보 다 동작을 쉽게 볼 수 있습니다.

PowerShell v2의 편집기를 사용하는 경우 첫 번째 예제에서 -eq가 파란색이라는 것을 알 수 있습니다. 두 번째 예제에서 -eq는 연산자이기 때문에 -eq가 회색이기 때문입니다.

또한 v2에서는 cmdletbinding 및 param과 함께 인수에 대해 엄격 할 수 있습니다.

function Return-True
{
    [CmdletBinding()]
    param()
    return $true
}
Return-True -eq $false

Return-True -eq $false
Return-True : A parameter cannot be found that matches parameter name 'eq'.
At line:7 char:16
+ Return-True -eq <<<<  $false
    + CategoryInfo          : InvalidArgument: (:) [Return-True], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Return-True
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top