about_Operator_Precedence
Descrição breve
Listas 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 à medida que aparecem dentro da expressão. As exceções são os operadores de atribuição, os operadores de conversão 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 fechada de uma expressão antes de uma parte não revelada.
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 precedência igual.
A coluna Operador lista os operadores. A coluna Referência lista o tópico ajuda do PowerShell no qual o operador é descrito. Para exibir o tópico, digite get-help <topic-name>
.
OPERATOR | REFERÊNCIA |
---|---|
$() @() () @{} |
about_Operators |
. ?. (acesso de membro) |
about_Operators |
:: (estático) |
about_Operators |
[0] ?[0] (operador index) |
about_Operators |
[int] (operadores de conversã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 range) |
about_Operators |
-f (operador de formato) |
about_Operators |
- (unário/negativo) |
about_Arithmetic_Operators |
* / % |
about_Arithmetic_Operators |
+ - |
about_Arithmetic_Operators |
O grupo de operadores a seguir tem precedência igual. Suas variantes que diferenciam maiúsculas de minúsculas e explicitamente não diferenciam maiúsculas de minúsculas têm a mesma precedência.
OPERATOR | 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:
OPERATOR | 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. Atribuição é sempre a última ação que acontece.
SYNTAX | REFERÊNCIA |
---|---|
. (dot-source) |
about_Operators |
& (chamada) |
about_Operators |
? <if-true> : <if-false> (Operador ternário) |
about_Operators |
?? (operador de união nula) |
about_Operators |
| (operador de pipeline) |
about_Operators |
> >> 2> 2>> 2>&1 |
about_Redirection |
&& || (operadores de cadeia de pipeline) |
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 delimitada 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 para o 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 conversão.
Essa 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. Por fim, ele converte o objeto selecionado como uma cadeia de caracteres. Nesse caso, a conversão não tem efeito.
PS> [string]@('Windows','PowerShell','2.0')[0]
Windows
Essa expressão usa parênteses para forçar a operação de conversão a ocorrer antes da seleção do índice. Como resultado, toda a matriz é convertida como uma cadeia de caracteres (única). 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 (AND lógico), o resultado da expressão é FALSE.
PS> 2 -gt 4 -and 1
False
É equivalente à expressão a seguir.
PS> (2 -gt 4) -and 1
False
Se o operador -and tivesse precedência maior, a resposta seria TRUE.
PS> 2 -gt (4 -and 1)
True
No entanto, este exemplo demonstra um princípio importante de gerenciamento 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 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.