Поделиться через


about_Operator_Precedence

Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0

РАЗДЕЛ

about_Operator_Precedence

КРАТКОЕ ОПИСАНИЕ

Содержит список операторов Windows PowerShell, расположенных в порядке приоритета.

[Этот раздел был создан при участии Кирка Манро (Kirk Munro), специалиста MVP по Windows PowerShell из Оттавы, Онтарио]

ПОДРОБНОЕ ОПИСАНИЕ

Операторы Windows PowerShell позволяют создавать простые, но эффективные выражения. В этом разделе операторы перечислены в порядке приоритета. Порядок приоритета — это последовательность, в которой Windows PowerShell выполняет операторы при наличии нескольких операторов в одном выражении.

Если операторы имеют равный приоритет, Windows PowerShell выполняет их слева направо. Исключениями являются операторы присваивания, операторы приведения и операторы отрицания (!, -not, -bnot), которые выполняются справа налево.

Можно использовать вложения, например круглые скобки, чтобы переопределить стандартный порядок приоритета и указать Windows PowerShell выполнять заключенную в скобки часть выражения до невключенной части.

В следующем списке операторы перечислены в порядке их выполнения. Операторы в одной строке или в одной группе имеют одинаковый приоритет.

В столбце «Оператор» перечислены операторы. В столбце «Справочные сведения» приведены разделы справки Windows PowerShell с описанием оператора. Чтобы открыть раздел, введите «get-help <имя_раздела>».

    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, отправляются в командлет Where-Object для фильтрации, прежде чем они будут назначены переменной $read_only.

В следующем примере показано, что оператор индекса имеет приоритет над оператором приведения. Первое выражение создает массив из трех строк. Затем оно использует оператор индекса со значением 0 для выбора первого объекта в массиве. Это первая строка. Наконец, оно приводит выбранный объект к виду строки. В этом случае приведение ни на что не влияет.

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

Второе выражение использует скобки для принудительного выполнения операции приведения перед выбором индекса. В результате весь массив преобразуется в (одну) строку. Затем оператор индекса выбирает первый элемент в массиве строк, который является первым символом.

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

В следующем примере, поскольку оператор -gt (больше чем) имеет более высокий приоритет, чем оператор -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