O operátorech přiřazení

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. Symbol rovná se (=) je přiřazovací operátor PowerShell. 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 prohlášení.

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řazuje hodnotu 12 pro $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.

Chcete-li přiřadit proměnné 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 zavináč @ následovaný páry klíč/hodnota 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í standardního operátoru přiřazení obdržíte kopii proměnné z nadřazeného oboru. Všimněte si ale, že $x v nadřazené oblasti se nezmění.

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

Přiřazení přírůstkovým operátorem

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 přidá, a teprve poté 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 z pravé strany 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í operátorem 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 potom 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 přiřazení hodnoty $null nebo "" 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í

Přiřazení pomocí operátoru dělení /= provádí dělení číselné hodnoty hodnotou uvedenou na pravé straně operátoru. Operátor nelze použít s řetězcovými proměnnými.

Operátor /= kombinuje dvě operace. Nejprve rozdělí a potom 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) číslem 2.

$a[1] /= 2

Přiřazení pomocí operátoru modulo

Přiřazení operátorem modulu %= vydělí hodnotu proměnné hodnotou na pravé straně operátoru. Potom operátor %= přiřadí zbytek (známý jako modul) proměnné. 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 (prefixová) nebo za proměnnou (postfixová). Prefixová verze operátoru nejprve zvýší hodnotu proměnné, než je tato hodnota použita v příkazu.

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

Postfixová verze operátoru zvýší proměnnou až po jejím použití v příkazu. Následující příklad ukazuje, že proměnné $c a $a mají různé hodnoty, protože hodnota je přiřazena $c před změnou $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 takto:

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

Postfixová verze operátoru sníží proměnnou až poté, co je její hodnota použita v příkazu. Následující příklad ukazuje, že proměnné $d a $a mají různé hodnoty, protože hodnota je přiřazena $d před změnou $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 nulovým sloučením ??= přiřadí hodnotu svého pravého operandu svému levému operandu pouze tehdy, pokud se levý operand vyhodnotí jako null. Operátor ??= nevyhodnocuje svůj pravý operand, pokud se levý operand vyhodnotí jako nenulový.

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

Další informace naleznete v části operátor nulového sjednocení.

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 na libovolný typ .NET tak, že jméno typu umístíte do závorek, které se objevují před názvem proměnné nebo před první přiřazenou hodnotou. Při přetypování proměnné definujete typ dat, 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é. Toto je známé jako vícenásobné přiřazení.

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é přiřadit jednu hodnotu více proměnným tím, že je spojíte do jednoho příkazu. 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é