about_Operator_Precedence

업데이트 날짜: 2012년 8월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0

항목

about_Operator_Precedence

간단한 설명

Windows PowerShell 연산자를 우선 순위대로 나열합니다.

[이 항목은 Ottawa, Ontario의 Windows PowerShell MVP인 Kirk Munro가 제공한 것입니다.]

자세한 설명

Windows PowerShell 연산자를 사용하면 간단하지만 강력한 식을 구성할 수 있습니다. 이 항목에서는 연산자를 우선 순위대로 나열합니다. 우선 순위는 여러 연산자가 같은 식에 나타나는 경우 Windows PowerShell에서 연산자를 평가하는 순서입니다.

연산자의 우선 순위가 동일한 경우 Windows PowerShell은 왼쪽에서 오른쪽으로 연산자를 평가합니다. 할당 연산자, 캐스트 연산자 및 부정 연산자(!, -not, -bnot)는 예외이며, 오른쪽에서 왼쪽으로 평가됩니다.

괄호와 같은 엔클로저를 사용하여 표준 우선 순위를 재정의하고 Windows PowerShell이 강제로 식에서 괄호로 묶이지 않은 부분보다 먼저 괄호로 묶인 부분을 평가하도록 할 수 있습니다.

다음 목록에서 연산자는 평가되는 순서로 나열됩니다. 같은 줄이나 같은 그룹의 연산자는 우선 순위가 동일합니다.

연산자 열에는 연산자가 나열됩니다. 참조 열에는 연산자를 설명하는 Windows PowerShell 도움말 항목이 나열됩니다. 항목을 표시하려면 "get-help <topic-name>"을 입력합니다.

    OPERATOR                         REFERENCE 
    --------                         ---------

    $()  @()                         about_Operators

    . (dereference) :: (static)      about_Operators

    [0] (index operator)             about_Operators

    [int] (cast operators)           about_Operators
 
    -split (unary) -join (unary)     about_Split, about_Join

    , (comma operator)               about_Operators

    ++ --                            about_Assignment_Operators
 
    -not ! -bNot                     about_Logical_Operators, about_Comparison_Operators

    .. (range operator)              about_Operators
   
    -f (format operator)             about_Operators 
   
    * / %                            about_Arithmetic_Operators
 
    + -                              about_Arithmetic_Operators

다음 연산자 그룹은 우선 순위가 동일합니다. 대/소문자를 구분하고 명시적으로 대/소문자 구분하지 않는 변형은 우선 순위가 동일합니다.

    -split (binary)                  about_Split
    -join (binary)                   about_Join
    -is  -isnot  -as                 about_Type_Operators
    -eq  -ne  -gt  -gt  -lt  -le     about_Comparison_Operators
    -like  -notlike                  about_comparison_operators
    -match  -notmatch                about_comparison_operators
    -in -notIn                       about_comparison_operators
    -contains -notContains           about_comparison_operators
    -replace                         about_comparison_operators

여기에서 목록은 다음 연산자를 우선 순위대로 다시 시작합니다.

    -band -bor -bxor                 about_Comparison_Operators

    -and -or -xor                    about_Comparison_Operators

    . (dot-source)  & (call)         about_Scopes, about_Operators

    | (pipeline operator)            about_Operators

    >  >>  2>  2>>  2>&1             about_Redirection

    =  +=  -=  *=  /= %=             about_Assignment_Operators

예제

다음 두 명령은 산술 연산자와 괄호를 사용하여 강제로 Windows PowerShell이 식의 괄호로 묶인 부분을 먼저 평가하도록 하는 효과를 보여 줍니다.

        C:\PS> 2 + 3 * 4
        14
        
        C:\PS> (2 + 3) * 4
        20

다음 예제에서는 로컬 디렉터리에서 읽기 전용 텍스트 파일을 가져와 $read_only 변수에 저장합니다.

        $read_only = get-childitem *.txt | where-object {$_.isReadOnly}

다음 예제와 동일합니다.

        $read_only = ( get-childitem *.txt | where-object {$_.isReadOnly} )

파이프라인 연산자(|)는 할당 연산자(=)보다 우선 순위가 높기 때문에 Get-ChildItem cmdlet에서 가져오는 파일을 Where-Object cmdlet으로 보내 $read_only 변수에 할당하기 전에 필터링합니다.

다음 예제에서는 인덱스 연산자가 캐스트 연산자보다 우선함을 보여 줍니다. 첫 번째 식은 세 문자열의 배열을 만듭니다. 그런 다음 값이 0인 인덱스 연산자를 사용하여 배열에서 첫 번째 문자열인 첫 번째 개체를 선택합니다. 마지막으로 선택한 개체를 문자열로 캐스팅합니다. 이 경우에는 캐스트가 효과가 없습니다.

        C:\PS> [string]@('Windows','PowerShell','2.0')[0]
        Windows

두 번째 식은 괄호를 사용하여 캐스트 작업이 인덱스 선택 전에 강제로 발생되도록 합니다. 따라서 전체 배열이 (단일) 문자열로 캐스팅됩니다. 그런 다음 인덱스 연산자는 문자열 배열에서 첫 번째 문자인 첫 번째 항목을 선택합니다.

        C:\PS> ([string]@('Windows','PowerShell','2.0'))[0]
        W

다음 예제에서는 -gt(greater-than) 연산자가 -and(논리적 AND) 연산자보다 우선 순위가 높기 때문에 식의 결과가 FALSE입니다.

        C:\PS> 2 -gt 4 -and 1
        False 

다음 식과 동일합니다.

        C:\PS> (2 -gt 4) -and 1
        False 

-and 연산자의 우선 순위가 더 높은 경우 답은 TRUE가 됩니다.

        C:\PS> 2 -gt (4 -and 1)
        True 

그러나 이 예제에서는 연산자 우선 순위 관리의 중요한 원칙을 보여 줍니다. 식을 해석하기 어려우면 기본 연산자 우선 순위를 적용하는 경우에도 괄호를 사용하여 평가 순서를 강제로 적용합니다. 괄호를 사용하면 스크립트를 읽고 유지 관리하는 사람에게 의도를 명확하게 제공할 수 있습니다.

참고 항목

about_assignment_operators

about_comparison_operators

about_join

about_Logical_Operators

about_Operators

about_Redirection

about_Scopes

about_Split

about_Type_Operators