about_Operator_Precedence

Descrizione breve

Elenca gli operatori di PowerShell in ordine di precedenza.

Descrizione lunga

Gli operatori di PowerShell consentono di costruire espressioni semplici, ma potenti. In questo argomento vengono elencati gli operatori in ordine di precedenza. L'ordine di precedenza è l'ordine in cui PowerShell valuta gli operatori quando più operatori vengono visualizzati nella stessa espressione.

Quando gli operatori hanno la stessa precedenza, PowerShell li valuta da sinistra a destra mentre vengono visualizzati all'interno dell'espressione. Le eccezioni sono gli operatori di assegnazione, gli operatori cast e gli operatori di negazione (!, -not, -bnot), che vengono valutati da destra a sinistra.

È possibile usare enclosure, ad esempio parentesi, per eseguire l'override dell'ordine di precedenza standard e forzare PowerShell a valutare la parte racchiusa di un'espressione prima di una parte non chiusa.

Nell'elenco seguente gli operatori vengono elencati nell'ordine in cui vengono valutati. Gli operatori nella stessa riga, o nello stesso gruppo, hanno la stessa precedenza.

La colonna Operatore elenca gli operatori. La colonna Riferimento elenca l'argomento della Guida di PowerShell in cui viene descritto l'operatore. Per visualizzare l'argomento, digitare get-help <topic-name>.

OPERATOR RIFERIMENTO
$() @() () @{} about_Operators
. ?. (accesso ai membri) about_Operators
:: (statico) about_Operators
[0] ?[0] (operatore index) about_Operators
[int] (operatori cast) about_Operators
-split (unario) about_Split
-join (unario) about_Join
, (operatore virgola) about_Operators
++ -- about_Assignment_Operators
! -not about_Logical_Operators
.. (operatore range) about_Operators
-f (operatore format) about_Operators
- (unario/negativo) about_Arithmetic_Operators
* / % about_Arithmetic_Operators
+ - about_Arithmetic_Operators

Il gruppo di operatori seguente ha la stessa precedenza. Le varianti con distinzione tra maiuscole e minuscole e senza distinzione tra maiuscole e minuscole hanno la stessa precedenza.

OPERATOR RIFERIMENTO
-split (binario) about_Split
-join (binario) 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

L'elenco riprende qui con gli operatori seguenti in ordine di precedenza:

OPERATOR RIFERIMENTO
-band -bnot -bor -bxor -shr -shl about_Arithmetic_Operators
-and -or -xor about_Logical_Operators

Gli elementi seguenti non sono operatori true. Fanno parte della sintassi dei comandi di PowerShell, non della sintassi delle espressioni. L'assegnazione è sempre l'ultima azione che si verifica.

SYNTAX RIFERIMENTO
. (dot-source) about_Operators
& (chiamata) about_Operators
? <if-true> : <if-false> (Operatore Ternario) about_Operators
?? (operatore null-coalese) about_Operators
| (operatore pipeline) about_Operators
> >> 2> 2>> 2>&1 about_Redirection
&& || (operatori della catena di pipeline) about_Operators
= += -= *= /= %= ??= about_Assignment_Operators

Esempi

I due comandi seguenti mostrano gli operatori aritmetici e l'effetto dell'uso delle parentesi per forzare PowerShell a valutare prima la parte racchiusa dell'espressione.

PS> 2 + 3 * 4
14

PS> (2 + 3) * 4
20

Nell'esempio seguente vengono recuperati i file di testo di sola lettura dalla directory locale e li salva nella $read_only variabile .

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

Equivale all'esempio seguente.

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

Poiché l'operatore pipeline (|) ha una precedenza maggiore rispetto all'operatore di assegnazione (=), i file che il Get-ChildItem cmdlet ottiene vengono inviati al Where-Object cmdlet per filtrare prima che vengano assegnati alla $read_only variabile.

Nell'esempio seguente viene illustrato che l'operatore index ha la precedenza sull'operatore cast.

Questa espressione crea una matrice di tre stringhe. Usa quindi l'operatore index con un valore pari a 0 per selezionare il primo oggetto nella matrice, ovvero la prima stringa. Infine, esegue il cast dell'oggetto selezionato come stringa. In questo caso, il cast non ha alcun effetto.

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

Questa espressione usa le parentesi per forzare l'esecuzione dell'operazione di cast prima della selezione dell'indice. Di conseguenza, viene eseguito il cast dell'intera matrice come stringa (singola). Quindi, l'operatore index seleziona il primo elemento nella matrice di stringhe, ovvero il primo carattere.

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

Nell'esempio seguente, poiché l'operatore -gt (maggiore di) ha una precedenza maggiore rispetto all'operatore -and (AND logico), il risultato dell'espressione è FAL edizione Standard.

PS> 2 -gt 4 -and 1
False

Equivale all'espressione seguente.

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

Se l'operatore -and ha una precedenza maggiore, la risposta sarà TRUE.

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

Tuttavia, questo esempio dimostra un principio importante di gestione della precedenza dell'operatore. Quando un'espressione è difficile da interpretare, usare le parentesi per forzare l'ordine di valutazione, anche quando forza la precedenza dell'operatore predefinito. Le parentesi rendono chiare le proprie intenzioni alle persone che leggono e gestiscono gli script.

Vedi anche