Share via


about_Operator_Precedence

Breve descrição

Lista os operadores do PowerShell em ordem de precedência.

Descrição longa

Os operadores do PowerShell permitem que você construa expressões simples, mas poderosas. Este tópico lista os operadores em ordem de precedência. A ordem de precedência é a ordem na qual o PowerShell avalia os operadores quando vários operadores aparecem na mesma expressão.

Quando os operadores têm precedência igual, o PowerShell os avalia da esquerda para a direita conforme aparecem na expressão. As exceções são os operadores de atribuição, os operadores de elenco e os operadores de negação (!, -not, -bnot), que são avaliados da direita para a esquerda.

Você pode usar compartimentos, como parênteses, para substituir a ordem de precedência padrão e forçar o PowerShell a avaliar a parte anexada de uma expressão antes de uma parte não fechada.

Na lista a seguir, os operadores são listados na ordem em que são avaliados. Os operadores na mesma linha, ou no mesmo grupo, têm igual precedência.

A coluna Operador lista os operadores. A coluna Referência lista o tópico da Ajuda do PowerShell no qual o operador é descrito. Para exibir o tópico, digite get-help <topic-name>.

OPERADOR REFERÊNCIA
$() @() () @{} about_Operators
. ?. (acesso de membro) about_Operators
:: (estático) about_Operators
[0] ?[0] (operador de índice) about_Operators
[int] (operadores de fundição) about_Operators
-split (unário) about_Split
-join (unário) about_Join
, (operador de vírgula) about_Operators
++ -- about_Assignment_Operators
! -not about_Logical_Operators
.. (operador de gama) about_Operators
-f (operador de formato) about_Operators
- (unário/negativo) about_Arithmetic_Operators
* / % about_Arithmetic_Operators
+ - about_Arithmetic_Operators

O seguinte grupo de operadores tem igual precedência. As suas variantes que diferenciam maiúsculas de minúsculas e explicitamente que não diferenciam maiúsculas de minúsculas têm a mesma precedência.

OPERADOR REFERÊNCIA
-split (binário) about_Split
-join (binário) about_Join
-is -isnot -as about_Type_Operators
-eq -ne -gt -ge -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

A lista é retomada aqui com os seguintes operadores em ordem de precedência:

OPERADOR REFERÊNCIA
-band -bnot -bor -bxor -shr -shl about_Arithmetic_Operators
-and -or -xor about_Logical_Operators

Os itens a seguir não são operadores verdadeiros. Eles fazem parte da sintaxe de comando do PowerShell, não da sintaxe de expressão. A atribuição é sempre a última ação que acontece.

SINTAXE REFERÊNCIA
. (fonte-ponto) about_Operators
& (chamada) about_Operators
? <if-true> : <if-false> (Operador ternário) about_Operators
?? (operador de coalese nulo) about_Operators
| (operador de gasoduto) about_Operators
> >> 2> 2>> 2>&1 about_Redirection
&& || (operadores de cadeias de oleodutos) about_Operators
= += -= *= /= %= ??= about_Assignment_Operators

Exemplos

Os dois comandos a seguir mostram os operadores aritméticos e o efeito do uso de parênteses para forçar o PowerShell a avaliar a parte incluída da expressão primeiro.

PS> 2 + 3 * 4
14

PS> (2 + 3) * 4
20

O exemplo a seguir obtém os arquivos de texto somente leitura do diretório local e os salva na $read_only variável.

$read_only = Get-ChildItem *.txt | Where-Object {$_.isReadOnly}

É equivalente ao exemplo a seguir.

$read_only = ( Get-ChildItem *.txt | Where-Object {$_.isReadOnly} )

Como o operador de pipeline (|) tem uma precedência maior do que o operador de atribuição (=), os arquivos que o Get-ChildItem cmdlet obtém são enviados ao Where-Object cmdlet para filtragem antes de serem atribuídos à $read_only variável.

O exemplo a seguir demonstra que o operador de índice tem precedência sobre o operador de elenco.

Esta expressão cria uma matriz de três cadeias de caracteres. Em seguida, ele usa o operador de índice com um valor de 0 para selecionar o primeiro objeto na matriz, que é a primeira cadeia de caracteres. Finalmente, ele projeta o objeto selecionado como uma cadeia de caracteres. Neste caso, o elenco não surte efeito.

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

Esta expressão usa parênteses para forçar a operação de transmissão a ocorrer antes da seleção do índice. Como resultado, toda a matriz é convertida como uma (única) cadeia de caracteres. Em seguida, o operador de índice seleciona o primeiro item na matriz de cadeia de caracteres, que é o primeiro caractere.

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

No exemplo a seguir, como o -gt operador (maior que) tem uma precedência maior do que o -and operador (lógico AND), o resultado da expressão é FALSE.

PS> 2 -gt 4 -and 1
False

É equivalente à seguinte expressão.

PS> (2 -gt 4) -and 1
False

Se o operador -and tivesse maior precedência, a resposta seria VERDADEIRA.

PS> 2 -gt (4 -and 1)
True

No entanto, este exemplo demonstra um princípio importante de gestão da precedência do operador. Quando uma expressão é difícil para as pessoas interpretarem, use parênteses para forçar a ordem de avaliação, mesmo quando ela força a precedência do operador padrão. Os parênteses deixam suas intenções claras para as pessoas que estão lendo e mantendo seus scripts.

Consulte também