Sdílet prostřednictvím


o_přiřazovacích_operátorech

Krátký popis

Popisuje, jak pomocí operátorů přiřadit hodnoty proměnným.

Dlouhý popis

Operátory přiřazení přiřazují proměnné jednu nebo více hodnot. Znak rovná se (=) je přiřazovací operátor v PowerShellu. PowerShell má také následující složené operátory přiřazení: +=, -=, *=, %=, ++, --, ??=. Operátory složeného přiřazení provádějí operace s hodnotami před přiřazením.

Syntaxe

Syntaxe operátorů přiřazení je následující:

  • <assignable-expression> <assignment-operator> <value>

Přiřaditelné výrazy zahrnují proměnné a vlastnosti. Hodnota může být jedna hodnota, pole hodnot, nebo příkaz, výraz či věta.

Operátory inkrementace a dekrementace jsou unární operátory. Každý má verze s předponou a příponou.

  • <assignable-expression><operator>
  • <operator><assignable-expression>

Hodnota přiřaditelného výrazu musí být číslo nebo musí být konvertibilní na číslo.

Použití operátoru přiřazení

Proměnné jsou pojmenované paměťové prostory, které ukládají hodnoty. Hodnoty uložíte do proměnných pomocí operátoru přiřazení =. Nová hodnota může nahradit existující hodnotu proměnné nebo můžete k existující hodnotě připojit novou hodnotu. Například následující příkaz přiřadí hodnotu PowerShellu k proměnné $MyShell:

$MyShell = "PowerShell"

Když přiřadíte hodnotu proměnné v PowerShellu, vytvoří se tato proměnná, pokud ještě neexistuje. Například první z následujících dvou příkazů přiřazení vytvoří $a proměnnou a přiřadí hodnotu 6 $a. Druhý příkaz přiřazení přiřadí hodnotu 12 k $a. První příkaz vytvoří novou proměnnou. Druhý příkaz změní pouze jeho hodnotu:

$a = 6
$a = 12

Proměnné v PowerShellu nemají konkrétní datový typ, pokud je nepřetypujete. Pokud proměnná obsahuje pouze jeden objekt, přebírá proměnná datový typ daného objektu. Pokud proměnná obsahuje kolekci objektů, má proměnná datový typ System.Object. Proto můžete kolekci přiřadit libovolný typ objektu. Následující příklad ukazuje, že do proměnné můžete přidat objekty procesu, objekty služby, řetězce a celá čísla bez generování chyby:

$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12

Protože operátor přiřazení = má nižší prioritu než operátor kanálu |, závorky nejsou nutné k přiřazení výsledku kanálu příkazu proměnné. Například následující příkaz seřadí služby v počítači a pak přiřadí seřazené služby k proměnné $a:

$a = Get-Service | Sort-Object -Property Name

Hodnotu vytvořenou příkazem můžete také přiřadit proměnné, jak je znázorněno v následujícím příkladu:

$a = if ($b -lt 0) { 0 } else { $b }

Tento příklad přiřadí nula proměnné $a, pokud je hodnota $b menší než nula. Přiřadí hodnotu $b$a, pokud hodnota $b není menší než nula.

Pokud chcete proměnné přiřadit pole (více hodnot), oddělte hodnoty čárkami takto:

$a = "apple", "orange", "lemon", "grape"

K přiřazení hashovací tabulky k proměnné použijte standardní zápis hashovací tabulky v PowerShellu. Zadejte znak zavináč @ následovaný klíč/hodnota páry oddělenými středníkem ; a uzavřenými ve složených závorkách { }. Pokud chcete například přiřadit hashovací tabulku proměnné $a, zadejte:

$a = @{one=1; two=2; three=3}

Chcete-li přiřadit šestnáctkové hodnoty proměnné, před hodnotu zadejte 0x. PowerShell převede šestnáctkovou hodnotu (0x10) na desetinnou hodnotu (v tomto případě 16) a tuto hodnotu přiřadí proměnné $a. Pokud chcete například přiřadit hodnotu 0x10 proměnné $a, zadejte:

$a = 0x10

Chcete-li přiřadit exponenciální hodnotu proměnné, zadejte kořenové číslo, písmeno ea číslo, které představuje násobek 10. Pokud chcete například přiřadit hodnotu 3,1415 mocnině 1 000 proměnné $a, zadejte:

$a = 3.1415e3

PowerShell může také převést kilobajty KB, megabajty MBa gigabajty GB na bajty. Pokud chcete například přiřadit hodnotu 10 kilobajtů proměnné $a, zadejte:

$a = 10kb

Použití operátorů složeného přiřazení

Operátory složeného přiřazení provádějí číselné operace s hodnotami před přiřazením.

Důležitý

Operátory složeného přiřazení nepoužívají dynamické obory. Proměnná je vždy v aktuálním rozsahu.

V následujícím příkladu je proměnná $x definována v globálním oboru. Složené závorky vytvoří nový obor. Proměnná $x uvnitř závorek je nová instance, nikoli kopie globální proměnné.

$x = 1 # Global scope
& { $x += 1; $x }
1

Při použití běžného operátoru přiřazení získáte kopii proměnné z nadřazeného oboru. Všimněte si ale, že $x v nadřazeném rámci se nezmění.

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

Přiřazení operátorem sčítání

Přiřazení operátorem sčítání += buď zvýší hodnotu proměnné, nebo připojí zadanou hodnotu k existující hodnotě. Akce závisí na tom, jestli má proměnná číselný nebo řetězcový typ a jestli proměnná obsahuje jednu hodnotu (skalární) nebo více hodnot (kolekci).

Operátor += kombinuje dvě operace. Nejprve se přidá, a pak se přiřadí. Proto jsou následující příkazy ekvivalentní:

$a += 2
$a = ($a + 2)

Pokud proměnná obsahuje jednu číselnou hodnotu, operátor += zvýší existující hodnotu o hodnotu na pravé straně operátoru. Potom operátor přiřadí výslednou hodnotu proměnné. Následující příklad ukazuje, jak pomocí operátoru += zvýšit hodnotu proměnné:

$a = 4
$a += 2
$a
6

Pokud je hodnota proměnné řetězec, hodnota na pravé straně operátoru je připojena k řetězci následujícím způsobem:

$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell

Pokud je hodnota proměnné pole, operátor += připojí hodnoty na pravé straně operátoru k poli. Pokud není pole explicitně zadáno přetypováním, můžete k matici připojit libovolný typ hodnoty následujícím způsobem:

$a = 1,2,3
$a += 2
$a
1
2
3
2

a

$a += "String"
$a
1
2
3
2
String

Pokud je hodnota proměnné tabulka hash, operátor += připojí hodnotu na pravé straně operátoru k tabulce hash. Protože ale jediný typ, který můžete přidat do hashovací tabulky, je další hashovací tabulka, všechna ostatní přiřazení selžou.

Například následující příkaz přiřadí k proměnné $a tabulku hash. Potom pomocí operátoru += připojí k existující tabulce hash další tabulku hash a efektivně přidá do existující tabulky hash novou dvojici klíč-hodnota. Tento příkaz bude úspěšný, jak je znázorněno ve výstupu:

$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name                           Value
----                           -----
a                              1
b                              2
mode                           write
c                              3

Následující příkaz se pokusí připojit celé číslo "1" k tabulce hash v proměnné $a. Tento příkaz selže:

$a = @{a = 1; b = 2; c = 3}
$a += 1
InvalidOperation:
Line |
   2 |  $a += 1
     |  ~~~~~~~
     | A hash table can only be added to another hash table.

Přiřazení pomocí operátoru odčítání

Přiřazení operátorem odčítání -= dekrementuje hodnotu proměnné o hodnotu zadanou na pravé straně operátoru. Tento operátor nelze použít s řetězcovými proměnnými a nedá se použít k odebrání elementu z kolekce.

Operátor -= kombinuje dvě operace. Nejprve odečítá a pak přiřadí. Proto jsou následující příkazy ekvivalentní:

$a -= 2
$a = ($a - 2)

Následující příklad ukazuje, jak pomocí operátoru -= snížit hodnotu proměnné:

$a = 8
$a -= 2
$a
6

Pomocí operátoru přiřazení -= můžete také snížit hodnotu člena číselného pole. Chcete-li to provést, zadejte index prvku pole, který chcete změnit. V následujícím příkladu je hodnota třetího prvku pole (prvek 2) snížena o 1:

$a = 1,2,3
$a[2] -= 1
$a
1
2
2

Operátor -= nelze použít k odstranění hodnot proměnné. Pokud chcete odstranit všechny hodnoty přiřazené proměnné, použijte rutiny Clear-Item nebo Clear-Variable k vymazání hodnot $null nebo "" z proměnné.

$a = $null

Pokud chcete odstranit určitou hodnotu z pole, pomocí zápisu pole přiřaďte konkrétní položce hodnotu $null. Následující příkaz například odstraní druhou hodnotu (pozice indexu 1) z pole:

$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3

Pokud chcete odstranit proměnnou, použijte rutinu Remove-Variable. Tato metoda je užitečná, když je proměnná explicitně přetypována na konkrétní datový typ a chcete netypovou proměnnou. Následující příkaz odstraní proměnnou $a:

Remove-Variable -Name a

Přiřazení pomocí operátoru násobení

Přiřazení operátorem násobení *= vynásobí číselnou hodnotu nebo připojí zadaný počet kopií řetězcové hodnoty proměnné.

Pokud proměnná obsahuje jednu číselnou hodnotu, tato hodnota se vynásobí hodnotou na pravé straně operátoru. Například následující příklad ukazuje, jak pomocí operátoru *= vynásobit hodnotu proměnné:

$a = 3
$a *= 4
$a
12

V tomto případě operátor *= kombinuje dvě operace. Nejprve se vynásobí a pak se přiřadí. Proto jsou následující příkazy ekvivalentní:

$a *= 2
$a = ($a * 2)

Pokud proměnná obsahuje řetězcovou hodnotu, PowerShell připojí k hodnotě zadaný počet řetězců následujícím způsobem:

$a = "file"
$a *= 4
$a
filefilefilefile

Pokud chcete prvek pole vynásobit, použijte index k identifikaci prvku, který chcete násobit. Například následující příkaz vynásobí první prvek pole (pozice indexu 0) o 2:

$a[0] *= 2

Přiřazení operátorem dělení

Operátor přiřazení dělením /= vydělí číselnou hodnotu hodnotou zadanou na pravé straně operátoru. Operátor nelze použít s řetězcovými proměnnými.

Operátor /= kombinuje dvě operace. Nejprve se rozdělí, a potom se přiřadí. Proto jsou následující dva příkazy ekvivalentní:

$a /= 2
$a = ($a / 2)

Například následující příkaz používá operátor /= k rozdělení hodnoty proměnné:

$a = 8
$a /=2
$a
4

Chcete-li rozdělit prvek pole, použijte index k identifikaci prvku, který chcete změnit. Například následující příkaz vydělí druhý prvek v poli (pozice indexu 1) dvojkou:

$a[1] /= 2

Přiřazení operátorem modulus

Přiřazení operátorem modulu %= vydělí hodnotu proměnné hodnotou na pravé straně operátoru. Potom operátor %= přiřadí zbytek proměnné (označované jako moduly). Tento operátor můžete použít pouze v případě, že proměnná obsahuje jednu číselnou hodnotu. Tento operátor nelze použít, pokud proměnná obsahuje řetězcovou proměnnou nebo pole.

Operátor %= kombinuje dvě operace. Nejprve rozdělí a určí zbytek a pak přiřadí zbytek proměnné. Proto jsou následující příkazy ekvivalentní:

$a %= 2
$a = ($a % 2)

Následující příklad ukazuje, jak pomocí operátoru %= uložit moduly podílu:

$a = 7
$a %= 4
$a
3

Operátory inkrementace a dekrementace

Operátor přírůstku ++ zvyšuje hodnotu proměnné o 1. Pokud použijete operátor inkrementace v jednoduchém příkazu, nebude vrácena žádná hodnota. Pokud chcete zobrazit výsledek, zobrazte hodnotu proměnné následujícím způsobem:

$a = 7
++$a
$a
8

Pokud chcete vynutit vrácení hodnoty, uzavřete proměnnou a operátor do závorek následujícím způsobem:

$a = 7
(++$a)
8

Operátor přírůstku lze umístit před proměnnou (prefix) nebo za ni (postfix). Verze předpony operátoru zvýší proměnnou před použitím její hodnoty v příkazu, následujícím způsobem:

$a = 7
$c = ++$a
$a
8
$c
8

Postfixová verze operátoru zvýší proměnnou poté, co je její hodnota použita v příkazu. V následujícím příkladu mají proměnné $c a $a různé hodnoty, protože hodnota je přiřazena $c před tím, než se změní $a.

$a = 7
$c = $a++
$a
8
$c
7

Operátor dekrementace -- sníží hodnotu proměnné o 1. Stejně jako u operátoru přírůstku se při použití operátoru v jednoduchém příkazu nevrátí žádná hodnota. K vrácení hodnoty použijte závorky následujícím způsobem:

$a = 7
--$a
$a
6
(--$a)
5

Předponová verze operátoru dekrementuje proměnnou před použitím její hodnoty v příkazu, jak následuje:

$a = 7
$c = --$a
$a
6
$c
6

Postfixová verze operátoru dekrementuje proměnnou poté, co je její hodnota použita ve výrazu. V následujícím příkladu mají proměnné $d a $a různé hodnoty, protože hodnota je přiřazena $d před tím, než se změní $a.

$a = 7
$d = $a--
$a
6
$d
7

Operátor přiřazení při sjednocení s hodnotou null

Operátor přiřazení s koalescí hodnoty null ??= přiřadí hodnotu z pravého operandu do levého operandu pouze v případě, že se levý operand vyhodnotí jako null. Operátor ??= nevyhodnocuje svůj pravý operand, pokud je levý operand nenulový.

$x = $null
$x ??= 100
$x
100

Další informace naleznete v tématu nulový koalescentní operátor.

Typy Microsoft .NET

Ve výchozím nastavení platí, že pokud má proměnná pouze jednu hodnotu, určuje hodnota, která je k proměnné přiřazena, datový typ proměnné. Následující příkaz například vytvoří proměnnou, která má typ System.Int32:

$a = 6

K vyhledání typu .NET proměnné použijte metodu GetType a její vlastnost FullName. Nezapomeňte zahrnout závorky za názvem metody GetType, i když volání metody nemá žádné argumenty:

$a = 6
$a.GetType().FullName
System.Int32

Chcete-li vytvořit proměnnou obsahující řetězec, přiřaďte k proměnné hodnotu řetězce. Chcete-li označit, že hodnota je řetězec, uzavřete ji do uvozovek následujícím způsobem:

$a = "6"
$a.GetType().FullName
System.String

Pokud je první hodnota přiřazená proměnné řetězec, PowerShell zachází se všemi operacemi jako s řetězcovými operacemi a přetypuje nové hodnoty na řetězce. K tomu dochází v následujícím příkladu:

$a = "file"
$a += 3
$a
file3

Pokud je první hodnota celé číslo, PowerShell zpracovává všechny operace jako celočíselné operace a přetypuje nové hodnoty na celá čísla. K tomu dochází v následujícím příkladu:

$a = 6
$a += "3"
$a
9

Novou skalární proměnnou můžete přetypovat do libovolného typu .NET tak, že název typu umístíte do závorek, které předcházejí názvu proměnné nebo první přiřazené hodnotě. Při přetypování proměnné definujete datový typ, který lze v proměnné uložit.

Například následující příkaz přetypuje proměnnou jako typ řetězce:

[string]$a = 27
$a += 3
$a
273

Následující příklad přetypuje první hodnotu místo přetypování proměnné:

$a = [string]27

Datový typ existující proměnné nelze přetypovat, pokud jeho hodnota nejde převést na nový datový typ.

$a = "string"
[int]$a
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."

Chcete-li změnit datový typ, je nutné nahradit jeho hodnotu následujícím způsobem:

[int]$a = 3

Pokud před názvem proměnné předepíšete datový typ, je typ této proměnné uzamčen, pokud typ explicitně nepřepíšete zadáním jiného datového typu. Pokud se pokusíte přiřadit hodnotu, která není kompatibilní s existujícím typem, a tento typ explicitně nepřepíšete, PowerShell zobrazí chybu, jak je znázorněno v následujícím příkladu:

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
   2 |  $a = "string"
     |  ~~~~~~~~~~~~~
     | Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[string]$a = "string"

V PowerShellu se datové typy proměnných, které obsahují více položek v poli, zpracovávají jinak než datové typy proměnných, které obsahují jednu položku. Pokud není datový typ výslovně přiřazen k proměnné pole, datový typ je vždy System.Object []. Tento datový typ je specifický pro pole.

Někdy můžete výchozí typ přepsat zadáním jiného typu. Například následující příkaz přetypuje proměnnou jako typ pole string []:

[string []] $a = "one", "two", "three"

Proměnné PowerShellu můžou být libovolným datovým typem .NET. Kromě toho můžete přiřadit libovolný plně kvalifikovaný datový typ .NET, který je k dispozici v aktuálním procesu. Například následující příkaz určuje datový typ System.DateTime:

[System.DateTime]$a = "5/31/2005"

Proměnná bude přiřazena hodnota, která odpovídá System.DateTime datovému typu. Hodnota proměnné $a by byla následující:

Tuesday, May 31, 2005 12:00:00 AM

Přiřazení více proměnných

V PowerShellu můžete přiřadit hodnoty více proměnným pomocí jednoho příkazu. První prvek hodnoty přiřazení je přiřazen první proměnné, druhý prvek je přiřazen k druhé proměnné, třetí prvek třetí proměnné. To se označuje jako přiřazení více.

Například následující příkaz přiřadí hodnotu 1 k proměnné $a, hodnotu 2 k proměnné $b a hodnotu 3 k proměnné $c:

$a, $b, $c = 1, 2, 3

Pokud hodnota přiřazení obsahuje více prvků než proměnné, přiřadí se všechny zbývající hodnoty poslední proměnné. Následující příkaz například obsahuje tři proměnné a pět hodnot:

$a, $b, $c = 1, 2, 3, 4, 5

PowerShell proto přiřadí hodnotu 1 k proměnné $a a hodnotu 2 k proměnné $b. Přiřadí hodnoty 3, 4 a 5 proměnné $c. Pokud chcete přiřadit hodnoty v proměnné $c třem dalším proměnným, použijte následující formát:

$d, $e, $f = $c

Tento příkaz přiřadí hodnotu 3 proměnné $d, hodnotu 4 k proměnné $e a hodnotu 5 k proměnné $f.

Pokud hodnota přiřazení obsahuje méně prvků než proměnné, přiřadí se zbývající proměnné hodnotě $null. Například následující příkaz obsahuje tři proměnné a dvě hodnoty:

$a, $b, $c = 1, 2

PowerShell proto přiřadí hodnotu 1 k proměnné $a a hodnotu 2 k proměnné $b. Proměnná $c je $null.

Můžete také jedné hodnotě přiřadit více proměnných pomocí operace řetězení proměnných. Následující příkaz například přiřadí hodnotu "tři" všem čtyř proměnným:

$a = $b = $c = $d = "three"

Kromě použití operace přiřazení k nastavení hodnoty proměnné můžete použít také rutinu Set-Variable. Následující příkaz například používá Set-Variable k přiřazení pole 1, 2, 3 k proměnné $a.

Set-Variable -Name a -Value 1, 2, 3

Viz také