about_Operator_Precedence

Krótki opis

Wyświetla listę operatorów programu PowerShell w kolejności pierwszeństwa.

Długi opis

Operatory programu PowerShell umożliwiają tworzenie prostych, ale zaawansowanych wyrażeń. W tym temacie wymieniono operatory w kolejności pierwszeństwa. Kolejność pierwszeństwa to kolejność, w której program PowerShell oblicza operatory, gdy wiele operatorów pojawia się w tym samym wyrażeniu.

Gdy operatory mają równe pierwszeństwo, program PowerShell ocenia je od lewej do prawej, gdy pojawiają się w wyrażeniu. Wyjątki to operatory przypisania, operatory rzutowania i operatory negacji (!, -not, -bnot), które są oceniane od prawej do lewej.

Można użyć obudów, takich jak nawiasy, aby zastąpić standardową kolejność pierwszeństwa i wymusić w programie PowerShell obliczenie zamkniętej części wyrażenia przed częścią nieujawioną.

Na poniższej liście operatory są wyświetlane w kolejności ich oceny. Operatory w tym samym wierszu lub w tej samej grupie mają równy pierwszeństwo.

Kolumna Operator zawiera listę operatorów. W kolumnie Odwołanie znajduje się temat Pomocy programu PowerShell, w którym opisano operator. Aby wyświetlić temat, wpisz get-help <topic-name>.

OPERATOR ODWOŁANIE
$() @() () @{} about_Operators
. ?. (dostęp do członków) about_Operators
:: (statyczne) about_Operators
[0] ?[0] (operator indeksu) about_Operators
[int] (operatory rzutowe) about_Operators
-split (jednoargumentowy) about_Split
-join (jednoargumentowy) about_Join
, (operator przecinka) about_Operators
++ -- about_Assignment_Operators
! -not about_Logical_Operators
.. (operator zakresu) about_Operators
-f (operator formatu) about_Operators
- (jednoargumentowy/ujemny) about_Arithmetic_Operators
* / % about_Arithmetic_Operators
+ - about_Arithmetic_Operators

Następująca grupa operatorów ma równe pierwszeństwo. Ich warianty uwzględniające wielkość liter i jawnie niewrażliwe na wielkość liter mają taki sam pierwszeństwo.

OPERATOR ODWOŁANIE
-split (binarny) about_Split
-join (binarny) 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

Lista zostanie wznowione tutaj z następującymi operatorami w kolejności pierwszeństwa:

OPERATOR ODWOŁANIE
-band -bnot -bor -bxor -shr -shl about_Arithmetic_Operators
-and -or -xor about_Logical_Operators

Następujące elementy nie są prawdziwymi operatorami. Są one częścią składni poleceń programu PowerShell, a nie składni wyrażeń. Przypisanie jest zawsze ostatnią akcją, która się dzieje.

SKŁADNIA ODWOŁANIE
. (dot-source) about_Operators
& (połączenie) about_Operators
? <if-true> : <if-false> (Operator Ternary) about_Operators
?? (operator null-coalese) about_Operators
| (operator potoku) about_Operators
> >> 2> 2>> 2>&1 about_Redirection
&& || (operatory łańcucha potoków) about_Operators
= += -= *= /= %= ??= about_Assignment_Operators

Przykłady

Następujące dwa polecenia pokazują operatory arytmetyczne i efekt używania nawiasów w celu wymuszenia w programie PowerShell oceny ujętej części wyrażenia jako pierwszej.

PS> 2 + 3 * 4
14

PS> (2 + 3) * 4
20

Poniższy przykład pobiera pliki tekstowe tylko do odczytu z katalogu lokalnego i zapisuje je w zmiennej $read_only .

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

Jest to odpowiednik poniższego przykładu.

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

Ponieważ operator potoku (|) ma wyższy priorytet niż operator przypisania (=), pliki, które Get-ChildItem pobiera polecenie cmdlet, są wysyłane do Where-Object polecenia cmdlet do filtrowania przed przypisaniem ich do zmiennej $read_only .

W poniższym przykładzie pokazano, że operator indeksu ma pierwszeństwo przed operatorem rzutowania.

To wyrażenie tworzy tablicę trzech ciągów. Następnie używa operatora indeksu z wartością 0, aby wybrać pierwszy obiekt w tablicy, który jest pierwszym ciągiem. Na koniec rzutuje wybrany obiekt jako ciąg. W tym przypadku obsada nie ma wpływu.

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

To wyrażenie używa nawiasów, aby wymusić wykonanie operacji rzutowania przed wyborem indeksu. W rezultacie cała tablica jest rzutowa jako (pojedynczy) ciąg. Następnie operator indeksu wybiera pierwszy element w tablicy ciągów, który jest pierwszym znakiem.

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

W poniższym przykładzie, ponieważ -gt operator (greater-than) ma wyższy priorytet niż -and operator (logiczny AND), wynik wyrażenia to FALSE.

PS> 2 -gt 4 -and 1
False

Jest to równoważne następującemu wyrażeniu.

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

Jeśli operator -i miał wyższy priorytet, odpowiedź będzie prawdziwa.

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

Jednak w tym przykładzie przedstawiono ważną zasadę zarządzania pierwszeństwem operatora. Gdy wyrażenie jest trudne do zinterpretowania, użyj nawiasów, aby wymusić kolejność obliczania, nawet jeśli wymusza pierwszeństwo operatora domyślnego. Nawiasy sprawiają, że intencje są jasne dla osób, które czytają i utrzymują skrypty.

Zobacz też