about_Operator_Precedence

Krótki opis

Listy operatory 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 ocenia operatory, gdy w tym samym wyrażeniu pojawia się wiele operatorów.

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ć, aby program PowerShell oszacował ujętą część wyrażenia przed częścią nieujawioną.

Na poniższej liście operatory są wymienione w kolejności, w której są oceniane. Operatory w tym samym wierszu lub w tej samej grupie mają równe 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 elementu członkowskiego) about_Operators
:: (statyczne) about_Operators
[0] ?[0] (operator indeksu) about_Operators
[int] (operatory rzutu) about_Operators
-split (jednoargumentowe) about_Split
-join (jednoargumentowe) about_Join
, (operator przecinka) about_Operators
++ -- about_Assignment_Operators
! -not about_Logical_Operators
.. (operator zakresu) about_Operators
-f (operator formatowania) about_Operators
- (jednoargumentowe/ujemne) about_Arithmetic_Operators
* / % about_Arithmetic_Operators
+ - about_Arithmetic_Operators

Następująca grupa operatorów ma równe pierwszeństwo. Ich warianty bez uwzględniania wielkości liter i jawnie bez uwzględniania wielkości liter mają taki sam pierwszeństwo.

OPERATOR ODWOŁANIE
-split (plik binarny) about_Split
-join (plik 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ą częścią składni poleceń programu PowerShell, a nie składni wyrażeń. Przypisanie jest zawsze ostatnią akcją.

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

Poniższe dwa polecenia pokazują operatory arytmetyczne i efekt używania nawiasów, aby wymusić w programie PowerShell ocenę 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 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 zaznaczony obiekt jako ciąg. W tym przypadku rzutowanie 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 indeksowania 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 (większy niż) ma wyższy priorytet niż -and operator (logiczny AND), wynikiem wyrażenia jest FALSE.

PS> 2 -gt 4 -and 1
False

Jest to odpowiednik następującego wyrażenia.

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

Gdyby operator -i miał wyższy priorytet, odpowiedź będzie miała wartość TRUE.

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 przez ludzi, użyj nawiasów, aby wymusić kolejność oceny, 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ż