Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Redakční poznámka
Důležité
specifikace jazyka Windows PowerShell 3.0 byla publikována v prosinci 2012 a je založená na prostředí Windows PowerShell 3.0. Tato specifikace neodráží aktuální stav PowerShellu. Tato dokumentace se neplánuje aktualizovat tak, aby odrážela aktuální stav. Tato dokumentace je zde uvedena pro historické reference.
Dokument specifikace je k dispozici jako dokument aplikace Microsoft Word z webu Microsoft Download Center na adrese: https://www.microsoft.com/download/details.aspx?id=36389 Dokument aplikace Word byl převeden pro prezentaci zde na webu Microsoft Learn. Během převodu byly provedeny některé redakční změny tak, aby vyhovovaly formátování pro platformu Docs. Některé překlepy a menší chyby byly opraveny.
Syntaxe:
expression:
primary-expression
bitwise-expression
logical-expression
comparison-expression
additive-expression
multiplicative-expression
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
dashdash:
dash dash
Popis:
Výraz je posloupnost operátorů a operandů, které označují metodu, funkci, zapisovatelné umístění nebo hodnotu; určuje výpočet hodnoty; produkuje jeden nebo více vedlejších účinků; nebo provádí jejich kombinaci. Příklad:
- Literál 123 je výraz, který označuje hodnotu int 123.
- Výraz
1,2,3,4určuje objekt pole se 4 prvky, který má zobrazené hodnoty. - Výraz
10.4 * $aurčuje výpočet. - Výraz
$a++vytvoří vedlejší efekt. -
$a[$i--] = $b[++$j]Výraz provádí kombinaci těchto věcí.
Kromě toho, jak je uvedeno u některých operátorů, pořadí vyhodnocení termínů ve výrazu a pořadí, ve kterém probíhají vedlejší účinky, jsou oba nespecifikované. Mezi příklady nezadaného chování patří: $i++ + $i, $i + --$ia $w[$j++] = $v[$j].
Implementace PowerShellu může poskytovat podporu pro uživatelem definované typy a tyto typy můžou mít definované operace. Všechny podrobnosti o těchto typech a operacích jsou definovány implementací.
Výraz nejvyšší úrovně je takový, který není součástí nějakého většího výrazu. Pokud výraz nejvyšší úrovně obsahuje operátor vedlejšího efektu, hodnota tohoto výrazu není zapsána do kanálu; jinak je to. Podrobné informace o tom najdete v §7.1.1 .
Výraz, který obvykle označuje kolekci ([§4§4]), se při použití hodnoty tohoto výrazu vyčíslí do jejích základních prvků. To ale není případ, kdy je výraz vyvoláním rutiny. Příklad:
$x = 10,20,30
$a = $($x; 99) # $a.Length is 4
$x = New-Object 'int[]' 3
$a = $($x; 99) # equivalent, $a.Length is 4
$a = $(New-Object 'int[]' 3; 99) # $a.Length is 2
V prvních dvou použitích operátoru $(...) je výraz označující kolekci proměnnou $x, která je výsledkem výčtu tří int hodnot plus int 99. Ve třetím případě je však výraz přímým voláním rutiny, takže výsledek není vyčíslen a $a je polem dvou prvků int[3] a int.
Pokud powershell nedefinuje operaci, zkontroluje se typ hodnoty určené levým operandem a zjistí, jestli má odpovídající op_<operation> metodu.
7.1 Primární výrazy
Syntaxe:
primary-expression:
value
member-access
element-access
invocation-expression
post-increment-expression
post-decrement-expression
value:
parenthesized-expression
sub-expression
array-expression
script-block-expression
hash-literal-expression
literal
type-literal
variable
7.1.1 Seskupení závorek
Syntaxe:
Tip
Zápis ~opt~ v definicích syntaxe označuje, že lexikální entita je v syntaxi nepovinná.
parenthesized-expression:
( new-lines~opt~ pipeline new-lines~opt~ )
Popis:
Výraz závorek je primární výraz , jehož typ a hodnota jsou stejné jako výraz bez závorek. Pokud výraz určuje proměnnou, výraz závorek určuje stejnou proměnnou. Například $x.m a ($x).m jsou ekvivalentní.
Seskupování závorek lze ve výrazu použít k dokumentování výchozí priority a asociativity v rámci daného výrazu. Lze je také použít k přepsání výchozí priority a asociativity. Příklad:
4 + 6 * 2 # 16
4 + (6 * 2) # 16 document default precedence
(4 + 6) * 2 # 20 override default precedence
Obvykle jsou seskupování závorek na nejvyšší úrovni redundantní. To ale není vždy případ. Podívejte se na následující příklad:
2,4,6 # Length 3; values 2,4,6
(2,4),6 # Length 2; values [Object[]],int
V druhém případě závorky mění sémantiku, což vede k matici, jejíž dva prvky jsou matice 2 int a skalární int 6.
Tady je další výjimka:
23.5/2.4 # pipeline gets 9.79166666666667
$a = 1234 * 3.5 # value not written to pipeline
$a # pipeline gets 4319
V prvním a třetím případě se hodnota výsledku zapíše do kanálu. Přestože se výraz v druhém případě vyhodnotí, výsledek se do kanálu nezapíše kvůli přítomnosti operátoru = vedlejšího efektu na nejvyšší úrovni. (Odebrání části $a = umožňuje zápis hodnoty, protože * není operátorem vedlejšího efektu.)
Pokud chcete zastavit hodnotu jakéhokoli výrazu, který neobsahuje vedlejší účinky nejvyšší úrovně, aby se nezapisovává do kanálu, zahoďte ji explicitně následujícím způsobem:
# None of these value are written to pipeline
[void](23.5/2.4)
[void]$a
$null = $a
$a > $null
Pokud chcete do kanálu zapsat hodnotu libovolného výrazu obsahujícího vedlejší účinky nejvyšší úrovně, uzavřete tento výraz do závorek následujícím způsobem:
($a = 1234 * 3.5) # pipeline gets 4319
V tomto případě nejsou seskupovací závorky nadbytečné.
V následujícím příkladu máme v řetězcovém literálu proměnnou náhradu (§2.3.5.2):
">$($a = -23)<" # value not written to pipeline, get ><
">$(($a = -23))<" # pipeline gets >-23<
V prvním případě závorky představují oddělovače dílčího výrazu, které se neskupují závorky, a protože výraz nejvyšší úrovně obsahuje operátor vedlejšího efektu, hodnota výrazu není zapsána do kanálu. Samozřejmě, že > znaky a < znaky jsou stále napsané.) Pokud se přidají seskupovací závorky – jak je znázorněno v druhém případě – zápis je povolený.
Následující příklady obsahují operátory vedlejšího efektu nejvyšší úrovně:
$a = $b = 0 # value not written to pipeline
$a = ($b = 0) # value not written to pipeline
($a = ($b = 0)) # pipeline gets 0
++$a # value not written to pipeline
(++$b) # pipeline gets 1
$a-- # value not written to pipeline
($b--) # pipeline gets 1
Použití seskupování závorek kolem výrazu obsahujícího žádné vedlejší účinky nejvyšší úrovně způsobí, že tyto závorky budou nadbytečné. Například;
$a # pipeline gets 0
($a) # no side effect, so () redundant
Podívejte se na následující příklad, který má dva vedlejší účinky, z nichž žádný není na nejvyšší úrovni:
12.6 + ($a = 10 - ++$b) # pipeline gets 21.6.
Výsledek se zapíše do kanálu, protože výraz nejvyšší úrovně nemá žádné vedlejší účinky.
7.1.2 Přístup členů
Syntaxe:
member-access:
primary-expression . new-line~opt~ member-name
primary-expression :: new-line~opt~ member-name
Všimněte si, že po primárním výrazu není povolené žádné prázdné znaky.
Popis:
. Operátor slouží k výběru člena instance z objektu nebo klíče z objektu Hashtable.
Levý operand musí určit objekt a pravý operand musí určit přístupný člen instance.
Buď pravý operand určuje přístupný člen instance v rámci typu objektu určeného levým operandem nebo, pokud levý operand určuje matici, pravý operand určuje přístupné členy instance v rámci každého prvku pole.
Prázdné znaky nejsou povoleny před operátorem . .
Tento operátor je ponechán asociativní.
:: Operátor slouží k výběru statického členu z daného typu. Levý operand musí určit typ a pravý operand musí určit přístupný statický člen v daném typu.
Prázdné znaky nejsou povoleny před operátorem :: .
Tento operátor je ponechán asociativní.
Pokud operand vpravo určuje zapisovatelné umístění v rámci typu objektu určeného levým operandem, pak celý výraz určuje zapisovatelné umístění.
Příklady:
$a = 10, 20, 30
$a.Length # get instance property
(10, 20, 30).Length
$property = "Length"
$a.$property # property name is a variable
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123
}
$h1.FirstName # designates the key FirstName
$h1.Keys # gets the collection of keys
[int]::MinValue # get static property
[double]::PositiveInfinity # get static property
$property = "MinValue"
[long]::$property # property name is a variable
foreach ($t in [byte], [int], [long]) {
$t::MaxValue # get static property
}
$a = @{ID = 1 }, @{ID = 2 }, @{ID = 3 }
$a.ID # get ID from each element in the array
7.1.3 Vyvolání výrazů
Syntaxe:
invocation-expression:
primary-expression . new-line~opt~ member-name argument-list
primary-expression :: new-line~opt~ member-name argument-list
argument-list:
( argument-expression-list~opt~ new-lines~opt~ )
Všimněte si, že po primárním výrazu není povolené žádné prázdné znaky.
Popis:
Vyvolání výraz volá metodu určenou metodou primary-expression.member-name nebo primary-expression::member-name. Závorky v seznamu argumentů obsahují pravděpodobně prázdný seznam výrazů oddělených čárkami, které určují argumenty , jejichž hodnoty jsou předány metodě. Před zavoláním metody jsou argumenty vyhodnoceny a převedeny podle pravidel §6, pokud je to nutné, aby odpovídaly typům očekávaným metodou. Pořadí vyhodnocení parametru primary-expression.member-name, primary-expression::member-namea argumenty jsou nespecifikované.
Tento operátor je ponechán asociativní.
Typ výsledku vyvolání výrazu je metoda-designátor (§4.5.24).
Příklady:
[Math]::Sqrt(2.0) # call method with argument 2.0
[char]::IsUpper("a") # call method
$b = "abc#$%XYZabc"
$b.ToUpper() # call instance method
[Math]::Sqrt(2) # convert 2 to 2.0 and call method
[Math]::Sqrt(2D) # convert 2D to 2.0 and call method
[Math]::Sqrt($true) # convert $true to 1.0 and call method
[Math]::Sqrt("20") # convert "20" to 20 and call method
$a = [Math]::Sqrt # get method descriptor for Sqrt
$a.Invoke(2.0) # call Sqrt via the descriptor
$a = [Math]::("Sq"+"rt") # get method descriptor for Sqrt
$a.Invoke(2.0) # call Sqrt via the descriptor
$a = [char]::ToLower # get method descriptor for ToLower
$a.Invoke("X") # call ToLower via the descriptor
Přístup k elementům 7.1.4
Syntaxe:
element-access:
primary-expression [ new-lines~opt~ expression new-lines~opt~ ]
Popis:
Mezi primárním výrazem a levou hranatou závorku ()[ nesmí existovat žádné prázdné znaky.
7.1.4.1 Dolní indexování pole
Popis:
Pole jsou podrobně popsána v §9. Pokud je výraz 1rozměrným polem, viz §7.1.4.5.
Pokud primární výraz označuje 1-dimenzionální pole A, vrátí operátor [] prvek umístěný na A[0 + expression] poté, co hodnota výrazu byla převedena na int.
Výsledek má typ prvku pole, který je v indexu. Pokud je výraz záporný, A[expression] určuje prvek umístěný na A[A.Length + expression]adrese .
Pokud primární výraz označuje dvojrozměrnou matici B, operátor [] vrátí prvek umístěný za B[0 + row,0 + column] hodnotou prvku řádku a sloupce součásti výrazu (které jsou zadány jako seznam oddělený čárkami) byly převedeny na int. Výsledek má typ prvku pole, který je v indexu. Na rozdíl od 1rozměrného pole nemají záporné pozice žádný zvláštní význam.
Pokud primární výraz určuje pole tří nebo více dimenzí, použijí se pravidla pro 2rozměrná pole a pozice dimenzí se zadají jako seznam hodnot oddělených čárkami.
Pokud se pokusíte o přístup pro čtení u existujícího elementu, je výsledkem $null. Jedná se o chybu při zápisu do neexistující elementu.
U výrazu dolního indexu multidimenzionálního pole není zadáno pořadí vyhodnocení výrazů pozice dimenze. Například při 3rozměrném poli $anení zadané chování $a[$i++,$i,++$i] .
Pokud je výraz pole, viz §7.1.4.5.
Tento operátor je ponechán asociativní.
Příklady:
$a = [int[]](10,20,30) # [int[]], Length 3
$a[1] # returns int 20
$a[20] # no such position, returns $null
$a[-1] # returns int 30, i.e., $a[$a.Length-1]
$a[2] = 5 # changes int 30 to int 5
$a[20] = 5 # implementation-defined behavior
$a = New-Object 'double[,]' 3,2
$a[0,0] = 10.5 # changes 0.0 to 10.5
$a[0,0]++ # changes 10.5 to 10.6
$list = ("red",$true,10),20,(1.2, "yes")
$list[2][1] # returns string "yes"
$a = @{ A = 10 },@{ B = $true },@{ C = 123.45 }
$a[1]["B"] # $a[1] is a Hashtable, where B is a key
$a = "red","green"
$a[1][4] # returns string "n" from string in $a[1]
Pokud se pokusíte o přístup k zápisu k existujícímu elementu, vyvolá se výjimka IndexOutOfRange .
7.1.4.2 Dolní indexování řetězce
Popis:
Pokud primární výraz určuje řetězec S, vrátí operátor [] znak umístěný v nulové pozici označené výrazem jako znak. Pokud je výraz větší nebo roven délce tohoto řetězce, výsledek je $null. Pokud je výraz záporný, S[expression] určuje prvek umístěný na S[S.Length + expression]adrese .
Příklady:
$s = "Hello" # string, Length 5, positions 0-4
$c = $s[1] # returns "e" as a string
$c = $s[20] # no such position, returns $null
$c = $s[-1] # returns "o", i.e., $s[$s.Length-1]
7.1.4.3 Dolní indexovací tabulka
Popis:
Pokud primární výraz určuje hashtable, vrátí operátor [] hodnoty přidružené ke klíčům určeným výrazem. Typ výrazu není omezen.
Pokud je výraz názvem jednoho klíče, výsledek je přidružená hodnota a má tento typ, pokud neexistuje žádný takový klíč, v takovém případě je $nullvýsledkem . Pokud $null se použije jako klíč, definuje se implementace chování. Pokud je výraz polem názvů klíčů, viz §7.1.4.5.
Pokud je výraz pole, viz §7.1.4.5.
Příklady:
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1['FirstName'] # the value associated with key FirstName
$h1['BirthDate'] # no such key, returns $null
$h1 = @{ 10 = "James"; 20.5 = "Anderson"; $true = 123 }
$h1[10] # returns value "James" using key 10
$h1[20.5] # returns value "Anderson" using key 20.5
$h1[$true] # returns value 123 using key $true
Pokud je výraz jedním názvem klíče, pokud $null se používá jako jediná hodnota pro dolní index hashtable, je vyvolána výjimka NullArrayIndex .
7.1.4.4 Dolní indexování dokumentu XML
Popis:
Pokud primární výraz určuje objekt typu XML, výraz se v případě potřeby převede na řetězec a operátor [] vrátí první podřízený prvek s názvem určeným výrazem. Typ výrazu musí být řetězec. Typ výsledku je definován implementací. Výsledek může být dolní index, aby vrátil první podřízený prvek. Pokud žádný podřízený prvek neexistuje s názvem určeným výrazem, výsledek je $null. Výsledek neoznamuje zapisovatelné umístění.
Příklady:
$x = [xml]@"
<Name>
<FirstName>Mary</FirstName>
<LastName>King</LastName>
</Name>
"@
$x['Name'] # refers to the element Name
$x['Name']['FirstName'] # refers to the element FirstName within Name
$x['FirstName'] # No such child element at the top level, result is $null
Typ výsledku je System.Xml.XmlElement nebo System.String.
7.1.4.5 Generování maticových řezů
Pokud primární výraz určuje objekt typu, který je výčtem (§4) nebo Hashtable a výraz je 1rozměrná matice, výsledkem je maticový řez (§9.9), který obsahuje prvky primárního výrazu určené prvky výrazu.
V případě hashtable obsahuje řez pole přidružené hodnoty k zadaným klíčům, pokud neexistuje žádný takový klíč, v takovém případě je $nullodpovídající prvek . Pokud $null se použije jako název libovolného klíče, chování je definováno implementací.
Příklady:
$a = [int[]](30,40,50,60,70,80,90)
$a[1,3,5] # slice has Length 3, value 40,60,80
$a[,5] # slice with Length 1
$a[@()] # slice with Length 0
$a[-1..-3] # slice with Length 3, value 90,80,70
$a = New-Object 'int[,]' 3,2
$a[0,0] = 10; $a[0,1] = 20; $a[1,0] = 30
$a[1,1] = 40; $a[2,0] = 50; $a[2,1] = 60
$a[(0,1),(1,0)] # slice with Length 2, value 20,30, parens needed
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1['FirstName'] # the value associated with key FirstName
$h1['BirthDate'] # no such key, returns $null
$h1['FirstName','IDNum'] # returns [Object[]], Length 2 (James/123)
$h1['FirstName','xxx'] # returns [Object[]], Length 2 (James/$null)
$h1[$null,'IDNum'] # returns [Object[]], Length 2 ($null/123)
Windows PowerShell: Pokud je výraz kolekcí dvou nebo více názvů klíčů, pokud $null se používá jako jakýkoli název klíče, který je ignorován a nemá žádný odpovídající prvek ve výsledném poli.
7.1.5 Operátory přírůstku a dekrementace
Syntaxe:
post-increment-expression:
primary-expression ++
post-decrement-expression:
primary-expression dashdash
Popis:
Primární výraz musí určit zapisovatelné umístění, které má hodnotu číselného typu (§4) nebo hodnotu $null. Pokud je $nullhodnota určená operandem , tato hodnota je převedena na typ int a hodnota nula před vyhodnocením operátoru. Typ hodnoty určené primárním výrazem se může při uložení výsledku změnit. Informace o změně typu prostřednictvím zadání najdete v části §7.11 .
Výsledek vytvořený operátorem přípony ++ je hodnota určená operandem. Po získání tohoto výsledku se hodnota určená operandem zvýší o 1 z příslušného typu.
Typ výsledku výrazu E++ je stejný jako výsledek výrazu E + 1 (§7.7).
Výsledek vytvořený operátorem přípony -- je hodnota určená operandem. Po získání tohoto výsledku se hodnota určená operandem sníží o 1 z příslušného typu.
Typ výsledku výrazu E-- je stejný jako výsledek výrazu E - 1 (§7.7).
Tyto operátory jsou ponechány asociativní.
Příklady:
$i = 0 # $i = 0
$i++ # $i is incremented by 1
$j = $i-- # $j takes on the value of $i before the decrement
$a = 1,2,3
$b = 9,8,7
$i = 0
$j = 1
$b[$j--] = $a[$i++] # $b[1] takes on the value of $a[0], then $j is
# decremented, $i incremented
$i = 2147483647 # $i holds a value of type int
$i++ # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
[int]$k = 0 # $k is constrained to int
$k = [int]::MaxValue # $k is set to 2147483647
$k++ # 2147483648 is too big to fit, imp-def behavior
$x = $null # target is unconstrained, $null goes to [int]0
$x++ # value treated as int, 0->1
Operátor 7.1.6 $(...)
Syntaxe:
sub-expression:
$( new-lines~opt~ statement-list~opt~ new-lines~opt~ )
Popis:
Pokud je seznam příkazů vynechán, výsledkem je $null. V opačném případě se vyhodnotí seznam příkazů . Všechny objekty zapsané do kanálu v rámci vyhodnocení se shromažďují v nekontrénované 1rozměrné matici v pořadí. Pokud je pole shromážděných objektů prázdné, výsledek je $null. Pokud pole shromážděných objektů obsahuje jeden prvek, výsledek je tento prvek; jinak je výsledkem nekontrénované 1rozměrné pole shromážděných výsledků.
Příklady:
$j = 20
$($i = 10) # pipeline gets nothing
$(($i = 10)) # pipeline gets int 10
$($i = 10; $j) # pipeline gets int 20
$(($i = 10); $j) # pipeline gets [Object[]](10,20)
$(($i = 10); ++$j) # pipeline gets int 10
$(($i = 10); (++$j)) # pipeline gets [Object[]](10,22)
$($i = 10; ++$j) # pipeline gets nothing
$(2,4,6) # pipeline gets [Object[]](2,4,6)
7.1.7 @(...) – operátor
Syntaxe:
array-expression:
@( new-lines~opt~ statement-list~opt~ new-lines~opt~ )
Popis:
Pokud je seznam příkazů vynechán, výsledkem je unconstrained 1-dimenzionální pole s délkou nula. V opačném případě se vyhodnocuje seznam příkazů a všechny objekty zapsané do kanálu v rámci vyhodnocení se shromažďují v nekontrénovaném 1rozměrném poli v pořadí. Výsledkem je (pravděpodobně prázdné) nekontrénované 1rozměrné pole.
Příklady:
$j = 20
@($i = 10) # 10 not written to pipeline, result is array of 0
@(($i = 10)) # pipeline gets 10, result is array of 1
@($i = 10; $j) # 10 not written to pipeline, result is array of 1
@(($i = 10); $j) # pipeline gets 10, result is array of 2
@(($i = 10); ++$j) # pipeline gets 10, result is array of 1
@(($i = 10); (++$j)) # pipeline gets both values, result is array of 2
@($i = 10; ++$j) # pipeline gets nothing, result is array of 0
$a = @(2,4,6) # result is array of 3
@($a) # result is the same array of 3
@(@($a)) # result is the same array of 3
7.1.8 Výraz bloku skriptu
Syntaxe:
script-block-expression:
{ new-lines~opt~ script-block new-lines~opt~ }
script-block:
param-block~opt~ statement-terminators~opt~ script-block-body~opt~
script-block-body:
named-block-list
statement-list
Popis:
param-block je popsán v §8.10.9. pojmenovaný-blok-list je popsán v §8.10.7.
Blok skriptu je nepojmenovaný blok příkazů, který lze použít jako jednu jednotku. Bloky skriptu lze použít k vyvolání bloku kódu, jako by šlo o jeden příkaz, nebo je lze přiřadit proměnným, které lze spustit.
Pojmenovaný seznam blok nebo seznam příkazů se provede a typ a hodnoty výsledku jsou typy a hodnoty výsledků těchto sad příkazů.
Skript-block-expression má typ scriptblock (§4.3.7).
Pokud je parametr blok vynechán, jsou všechny argumenty předané bloku skriptu k dispozici prostřednictvím $args(§8.10.1).
Během vazby parametrů lze blok skriptu předat buď jako objekt bloku skriptu, nebo jako výsledek po vyhodnocení bloku skriptu. Další informace naleznete v §6.17 .
7.1.9 Výraz literálu hash
Syntaxe:
hash-literal-expression:
@{ new-lines~opt~ hash-literal-body~opt~ new-lines~opt~ }
hash-literal-body:
hash-entry
hash-literal-body statement-terminators hash-entry
hash-entry:
key-expression = new-lines~opt~ statement
key-expression:
simple-name
unary-expression
statement-terminators:
statement-terminator
statement-terminators statement-terminator
statement-terminator:
;
new-line-character
Popis:
Výraz hash-literal-expression se používá k vytvoření hashtable (§10) s nulovými nebo více prvky, z nichž každý je pár klíč/hodnota.
Klíč může mít jakýkoli typ s výjimkou typu null. Přidružené hodnoty mohou mít libovolný typ, včetně typu null, a každá z těchto hodnot může být libovolný výraz, který určuje požadovanou hodnotu, včetně $null.
Řazení párů klíč/hodnota není významné.
Příklady:
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$last = "Anderson"; $IDNum = 120
$h2 = @{ FirstName = "James"; LastName = $last; IDNum = $IDNum + 3 }
$h3 = @{ }
$h4 = @{ 10 = "James"; 20.5 = "Anderson"; $true = 123 }
který vytvoří dvě hashovací tabulky $h1 a $h2každý obsahuje tři páry klíč/hodnota a třetí, $h3který je prázdný. Hashtable $h4 obsahuje klíče různých typů.
7.1.10 Zadejte literálový výraz
Syntaxe:
type-literal:
[ type-spec ]
type-spec:
array-type-name new-lines~opt~ dimension~opt~ ]
generic-type-name new-lines~opt~ generic-type-arguments ]
type-name
dimension:
,
dimension ,
generic-type-arguments:
type-spec new-lines~opt~
generic-type-arguments , new-lines~opt~ type-spec
array-type-name:
type-name [
generic-type-name:
type-name [
Popis:
Literál typu je reprezentován v implementaci některými nespecifikovanými podkladovými typy. V důsledku toho je název typu synonymem pro jeho základní typ.
Literály typu se používají v řadě kontextů:
- Určení explicitního převodu (§6, §7.2.9)
- Vytvoření pole s omezením typu (§9.4)
- Přístup ke statickým členům objektu (§7.1.2)
- Určení omezení typu pro proměnnou (§5.3) nebo parametr funkce (§8.10.2)
Příklady:
[int].IsPrimitive # $true
[Object[]].FullName # "System.Object[]"
[int[,,]].GetArrayRank() # 3
Obecný typ zásobníku (§4.4), který se specializuje na uchovávání řetězců, může být napsán jako [Stack[string]]a obecný typ slovníku, který je specializovaný na uložení int klíčů s přidruženými řetězcovými hodnotami, může být zapsán jako [Dictionary[int,string]].
Typ literálu je System.Type. Úplný název pro typ Stack[string] navrhovaný výše je System.Collections.Generic.Stack[int]. Úplný název pro typ Dictionary[int,string] navrhovaný výše je System.Collections.Generic.Dictionary[int,string].
7.2 Unární operátory
Syntaxe:
unary-expression:
primary-expression
expression-with-unary-operator
expression-with-unary-operator:
, new-lines~opt~ unary-expression
-not new-lines~opt~ unary-expression
! new-lines~opt~ unary-expression
-bnot new-lines~opt~ unary-expression
+ new-lines~opt~ unary-expression
dash new-lines~opt~ unary-expression
pre-increment-expression
pre-decrement-expression
cast-expression
-split new-lines~opt~ unary-expression
-join new-lines~opt~ unary-expression
pre-increment-expression:
++ new-lines~opt~ unary-expression
pre-decrement-expression:
dashdash new-lines~opt~ unary-expression
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
cast-expression:
type-literal unary-expression
dashdash:
dash dash
7.2.1 Unární operátor čárky
Popis:
Operátor čárky (,) vytvoří unconstrained 1-dimenzionální pole s jedním prvkem, jehož typ a hodnota jsou unární-výraz.
Tento operátor je správný asociativní.
Příklady:
$a = ,10 # create an unconstrained array of 1 element, $a[0],
# which has type int
$a = ,(10,"red") # create an unconstrained array of 1 element,
$a[0],
# which is an unconstrained array of 2 elements,
# $a[0][0] an int, and $a[0][1] a string
$a = ,,10 # create an unconstrained array of 1 element, which is
# an unconstrained array of 1 element, which is an int
# $a[0][0] is the int. Contrast this with @(@(10))
7.2.2 Logický NOT
Syntaxe:
logical-not-operator:
dash not
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
-not Operátor v případě potřeby převede hodnotu určenou unárním výrazem na typ bool (§6.2), a v případě potřeby vytvoří výsledek tohoto typu. Pokud je hodnota unárního výrazu True, výsledek je False a naopak.
! Operátor je alternativním pravopisem pro -not.
Tento operátor je správný asociativní.
Příklady:
-not $true # False
-not -not $false # False
-not 0 # True
-not 1.23 # False
!"xyz" # False
7.2.3 Bitwise NOT
Syntaxe:
bitwise-not-operator:
dash bnot
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
-bnot Operátor v případě potřeby převede hodnotu určenou unárním výrazem na celočíselnou hodnotu (§6.4). Pokud převedenou hodnotu lze reprezentovat v typu int , jedná se o typ výsledku. Jinak, pokud převedená hodnota může být reprezentována v typu long , pak je to typ výsledku. Jinak je výraz neformulovaný. Výsledná hodnota je doplněk těch, které jsou převedeny.
Tento operátor je správný asociativní.
Příklady:
-bnot $true # int with value 0xFFFFFFFE
-bnot 10 # int with value 0xFFFFFFF5
-bnot 2147483648.1 # long with value 0xFFFFFFFF7FFFFFFF
-bnot $null # int with value 0xFFFFFFFF
-bnot "0xabc" # int with value 0xFFFFF543
7.2.4 Unární plus
Popis:
Výraz formuláře + unary-expression je považován za psaný jako 0 + unary-expression (§7.7). Celočíselná literál 0 má typ int.
Tento operátor je správný asociativní.
Příklady:
+123L # type long, value 123
+0.12340D # type decimal, value 0.12340
+"0xabc" # type int, value 2748
7.2.5 Unární minus
Popis:
Výraz formuláře - unary-expression je považován za psaný jako 0 - unary-expression (§7.7). Celočíselná literál 0 má typ int. Operátor minus může být libovolný z pomlček uvedených v §7.2.
Tento operátor je správný asociativní.
Příklady:
-$true # type int, value -1
-123L # type long, value -123
-0.12340D # type decimal, value -0.12340
7.2.6 Operátory inkrementace a dekrementace předpon
Popis:
Unární výraz musí určit zapisovatelné umístění, které má hodnotu číselného typu (§4) nebo hodnotu $null. Pokud je hodnota určená unárním výrazem , hodnota unárního výrazu$null se převede na typ int a hodnotu nula před vyhodnocením operátoru.
Poznámka:
Typ hodnoty určené unárním výrazem se může při uložení výsledku změnit. Informace o změně typu prostřednictvím zadání najdete v části §7.11 .
U operátoru ++ inkrementace předpony se hodnota unárního výrazu zvýší o 1 odpovídající typ. Výsledkem je nová hodnota po zvýšení. Výraz ++E je ekvivalentní E += 1(§7.11.2).
U operátoru -- dekrementace předpony je hodnota unárního výrazu dekrementována odpovídajícím typem 1 . Výsledkem je nová hodnota po dekrementování. Výraz --E je ekvivalentní E -= 1(§7.11.2). Operátor dekrementace předpony může být libovolný ze vzorů odpovídajících vzoru dashdash v §7.2.
Tyto operátory jsou správné asociativní.
Příklady:
$i = 0 # $i = 0
++$i # $i is incremented by 1
$j = --$i # $i is decremented then $j takes on the value of $i
$a = 1,2,3
$b = 9,8,7
$i = 0;
$j = 1
$b[--$j] = $a[++$i] # $j is # decremented, $i incremented, then $b[0]
# takes on the value of $a[1]
$i = 2147483647 # $i holds a value of type int
++$i # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
[int]$k = 0 # $k is constrained to int
$k = [int]::MinValue # $k is set to -2147483648
--$k # -2147483649 is too small to fit, imp-def behavior
$x = $null # target is unconstrained, $null goes to [int]0
--$x # value treated as int, 0 becomes -1
7.2.7 Unární -join operátor
Syntaxe:
join-operator:
dash join
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Unární -join operátor vytvoří řetězec, který je zřetězením hodnoty jednoho nebo více objektů určených unárním výrazem. (Oddělovač lze vložit pomocí binární verze tohoto operátoru (§7.8.4.4).)
unary-expression může být skalární hodnota nebo kolekce.
Příklady:
-join (10, 20, 30) # result is "102030"
-join (123, $false, 19.34e17) # result is "123False1.934E+18"
-join 12345 # result is "12345"
-join $null # result is ""
7.2.8 Unární -split operátor
Syntaxe:
split-operator:
dash split
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Unární -split operátor rozdělí jeden nebo více řetězců určených unárním výrazem a vrátí jejich dílčí části v omezeném 1rozměrném poli řetězce. Zachází s libovolnou souvislou skupinou prázdných znaků jako oddělovačem mezi po sobě jdoucími dílčími částmi. Explicitní řetězec oddělovače lze zadat pomocí binární verze tohoto operátoru (§7.8.4.5) nebo jeho dvou variant (§7.8).
Text oddělovače není součástí výsledných řetězců. Počáteční a koncové prázdné znaky ve vstupním řetězci se ignorují. Vstupní řetězec, který je prázdný nebo obsahuje prázdné znaky, má za následek pouze pole jednoho řetězce, který je prázdný.
unární výraz může určit skalární hodnotu nebo pole řetězců.
Příklady:
-split " red`tblue`ngreen " # 3 strings: "red", "blue", "green"
-split ("yes no", "up down") # 4 strings: "yes", "no", "up", "down"
-split " " # 1 (empty) string
Operátor přetypování 7.2.9
Popis:
Tento operátor převede explicitně (§6) hodnotu určenou unárním výrazem na typ určený literálem typu (§7.1.10). Pokud je literál typu jiný než void, je typ výsledku pojmenovaný typ a hodnota je hodnota po převodu. Pokud je literál typu void, žádný objekt není zapsán do kanálu a neexistuje žádný výsledek.
Pokud je výraz libovolného typu přetypován na stejný typ, výsledný typ a hodnota je typ a hodnota unárního výrazu.
Tento operátor je správný asociativní.
Příklady:
[bool]-10 # a bool with value True
[int]-10.70D # a decimal with value -10
[int]10.7 # an int with value 11
[long]"+2.3e+3" # a long with value 2300
[char[]]"Hello" # an array of 5 char with values H, e, l, l, and o.
7.3 Binární operátor čárky
Syntaxe:
array-literal-expression:
unary-expression , new-lines~opt~ array-literal-expression
Popis:
Binární operátor čárky vytvoří 1rozměrné pole, jehož prvky jsou hodnoty určené svými operandy v lexikálním pořadí. Pole má nesouvisený typ.
Příklady:
2,4,6 # Length 3; values 2,4,6
(2,4),6 # Length 2; values [Object[]],int
(2,4,6),12,(2..4) # Length 3; [Object[]],int,[Object[]]
2,4,6,"red",$null,$true # Length 6
Přidání závorek do určitých binárních výrazů čárky nezdokumentuje výchozí prioritu; místo toho změní výsledek.
7.4 Operátor rozsahu
Syntaxe:
range-expression:
unary-expression .. new-lines~opt~ unary-expression
Popis:
Výraz rozsahu vytvoří unconstrained 1-dimenzionální pole, jehož prvky jsou hodnoty int sekvence určené hranicemi rozsahu. Hodnoty určené operandy jsou v případě potřeby převedeny na int (§6.4). Operand označující nižší hodnotu po převodu je dolní mez, zatímco operand označující vyšší hodnotu po převodu je horní mez. Obě hranice mohou být stejné, v takovém případě výsledná matice má délku 1.
Pokud levý operand určuje dolní mez, sekvence je ve vzestupném pořadí. Pokud levý operand určuje horní mez, sekvence je v sestupném pořadí.
Koncepčně je tento operátor zkratkou pro odpovídající sekvenci binárního operátoru čárky. Například rozsah 5..8 lze vygenerovat také pomocí 5,6,7,8. Pokud však potřebujete vzestupnou nebo sestupnou sekvenci bez pole, implementace se může vyhnout generování skutečného pole. Například v foreach ($i in 1..5) { ... }, není nutné vytvořit žádné pole.
Výraz rozsahu lze použít k určení maticové výseče (§9.9).
Příklady:
1..10 # ascending range 1..10
-495..-500 # descending range -495..-500
16..16 # sequence of 1
$x = 1.5
$x..5.40D # ascending range 2..5
$true..3 # ascending range 1..3
-2..$null # ascending range -2..0
0xf..0xa # descending range 15..10
Operátor formátu 7.5
Syntaxe:
format-expression:
format-specification-string format-operator new-lines~opt~ range-expression
format-operator:
dash f
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Formátovací výraz formátuje jednu nebo více hodnot určených výrazem rozsahu podle řetězce format-specification-string určeného výrazem format-expression. Pozice hodnot určených výrazem rozsahu jsou očíslovány od nuly a zvyšují se v lexikálním pořadí. Výsledek má typ string.
Řetězec specifikace formátu může obsahovat nulové nebo více specifikací formátu, které mají následující tvar:
{N [ ,M ][ : FormatString ]}
N představuje (povinné) umístění hodnoty výrazu rozsahu , M představuje (volitelné) minimální šířku zobrazení a FormatString označuje (volitelný) formát. Pokud šířka formátované hodnoty překročí zadanou šířku, šířka se odpovídajícím způsobem zvýší. Hodnoty, jejichž pozice nejsou odkazovány v FormatString jsou ignorovány po vyhodnocení pro všechny vedlejší účinky. Pokud N odkazuje na neexistující pozici, chování je definováno implementací. Hodnota typu $null a void jsou formátovány jako prázdné řetězce. Matice jsou formátovány jako dílčí výraz (§7.1.6). Pokud chcete zahrnout znaky { a } ve specifikaci formátu, aniž by byly interpretovány jako oddělovače formátu, zapište je jako {{ a }}v uvedeném pořadí.
Úplnou definici specifikací formátu naleznete v typu System.IFormattable v technické zprávě Ecma TR/84.
Příklady:
"__{0,3}__" -f 5 # __ 5__
"__{0,-3}__" -f 5 # __5 __
"__{0,3:000}__" -f 5 # __005__
"__{0,5:0.00}__" -f 5.0 # __ 5.00__
"__{0:C}__" -f 1234567.888 # __$1,234,567.89__
"__{0:C}__" -f -1234.56 # __($1,234.56)__
"__{0,12:e2}__" -f 123.456e2 # __ 1.23e+004__
"__{0,-12:p}__" -f -0.252 # __-25.20 % __
$i = 5; $j = 3
"__{0} + {1} <= {2}__" -f $i,$j,($i+$j) # __5 + 3 <= 8__
$format = "__0x{0:X8}__"
$format -f 65535 # __0x0000FFFF__
Pokud N ve specifikaci formátu odkazuje na neexistující pozici, vyvolá se chyba FormatError .
7.6 Multiplikativní operátory
Syntaxe:
multiplicative-expression:
multiplicative-expression * new-lines~opt~ format-expression
multiplicative-expression / new-lines~opt~ format-expression
multiplicative-expression % new-lines~opt~ format-expression
7.6.1 Násobení
Popis:
Výsledek operátoru * násobení je součin hodnot určených dvěma operandy po použití obvyklých aritmetických převodů (§6,15).
Tento operátor je ponechán asociativní.
Příklady:
12 * -10L # long result -120
-10.300D * 12 # decimal result -123.600
10.6 * 12 # double result 127.2
12 * "0xabc" # int result 32976
7.6.2 Replikace řetězců
Popis:
Když levý operand určí řetězec, vytvoří binární * operátor nový řetězec, který obsahuje řetězec určený levým operandem replikovaný kolikrát určil hodnotu pravého operandu převedenou na celočíselnou typ (§6.4).
Tento operátor je ponechán asociativní.
Příklady:
"red" * "3" # string replicated 3 times
"red" * 4 # string replicated 4 times
"red" * 0 # results in an empty string
"red" * 2.3450D # string replicated twice
"red" * 2.7 # string replicated 3 times
7.6.3 Replikace pole
Popis:
Když levý operand určí matici, vytvoří binární * operátor novou unconstrained 1-dimenzionální matici, která obsahuje hodnotu určenou levým operandem replikoval počet časů určený hodnotou pravého operandu, jak je převedeno na celočíselného typu (§6.4). Počet replikace nula vede k matici délky 1. Pokud levý operand označuje multidimenzionální matici, je před použití zploštěnou (§9.12).
Tento operátor je ponechán asociativní.
Příklady:
$a = [int[]](10,20) # [int[]], Length 2*1
$a * "3" # [Object[]], Length 2*3
$a * 4 # [Object[]], Length 2*4
$a * 0 # [Object[]], Length 2*0
$a * 2.3450D # [Object[]], Length 2*2
$a * 2.7 # [Object[]], Length 2*3
(New-Object 'float[,]' 2,3) * 2 # [Object[]], Length 2*2
7.6.4 Divize
Popis:
Výsledek operátoru / dělení je podíl, pokud je hodnota určená levým operandem vydělena hodnotou určenou pravým operandem po obvyklých aritmetických převodech (§6.15).
Pokud se provede pokus o provedení celočíselného nebo desetinného dělení nulou, vyvolá se implementovaná ukončovací chyba.
Tento operátor je ponechán asociativní.
Příklady:
10/-10 # int result -1
12/-10 # double result -1.2
12/-10D # decimal result 1.2
12/10.6 # double result 1.13207547169811
12/"0xabc" # double result 0.00436681222707424
Pokud se provede pokus o provedení celočíselného nebo desetinného dělení nulou, vyvolá se výjimka RuntimeException .
7.6.5 Zbytek
Popis:
Výsledek operátoru % zbytku je zbytek, pokud je hodnota určená levým operandem vydělena hodnotou určenou pravým operandem po použití obvyklých aritmetických převodů (§6.15).
Pokud se provede pokus o provedení celočíselného nebo desetinného dělení nulou, vyvolá se implementovaná ukončovací chyba.
Příklady:
10 % 3 # int result 1
10.0 % 0.3 # double result 0.1
10.00D % "0x4" # decimal result 2.00
Pokud se provede pokus o provedení celočíselného nebo desetinného dělení nulou, vyvolá se výjimka RuntimeException .
7.7 Operátory sčítání
Syntaxe:
additive-expression:
primary-expression + new-lines~opt~ expression
primary-expression dash new-lines~opt~ expression
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
7.7.1 Sčítání
Popis:
Výsledek operátoru + sčítání je součet hodnot určených dvěma operandy po použití obvyklých aritmetických převodů (§6.15).
Tento operátor je ponechán asociativní.
Příklady:
12 + -10L # long result 2
-10.300D + 12 # decimal result 1.700
10.6 + 12 # double result 22.6
12 + "0xabc" # int result 2760
7.7.2 Zřetězení řetězců
Popis:
Když levý operand určí řetězec, vytvoří binární + operátor nový řetězec, který obsahuje hodnotu určenou levým operandem následovaný okamžitě hodnotami určenými správným operandem, který je převeden na řetězec typu (§6.8).
Tento operátor je ponechán asociativní.
Příklady:
"red" + "blue" # "redblue"
"red" + "123" # "red123"
"red" + 123 # "red123"
"red" + 123.456e+5 # "red12345600"
"red" + (20,30,40) # "red20 30 40"
7.7.3 Zřetězení pole
Popis:
Když levý operand určí matici, vytvoří binární + operátor nové nekontrénované 1-dimenzionální pole, které obsahuje prvky určené levým operandem následované okamžitě hodnotami určenými pravý operand. Multidimenzionální pole, která jsou přítomna v obou operandech, jsou před používáním zploštěna (§9.12).
Tento operátor je ponechán asociativní.
Příklady:
$a = [int[]](10,20) # [int[]], Length 2
$a + "red" # [Object[]], Length 3
$a + 12.5,$true # [Object[]], Length 4
$a + (New-Object 'float[,]' 2,3) # [Object[]], Length 8
(New-Object 'float[,]' 2,3) + $a # [Object[]], Length 8
7.7.4 Zřetězení hashovací tabulky
Popis:
Pokud oba operandy určují hashtables binární + operátor vytvoří nový hashtable, který obsahuje prvky určené levým operandem následované prvky určenými pravý operand.
Pokud hashtables obsahují stejný klíč, vyvolá se implementovaná ukončovací chyba.
Tento operátor je ponechán asociativní.
Příklady:
$h1 = @{ FirstName = "James"; LastName = "Anderson" }
$h2 = @{ Dept = "Personnel" }
$h3 = $h1 + $h2 # new Hashtable, Count = 3
Pokud hashtables obsahují stejný klíč, je vyvolána výjimka typu BadOperatorArgument .
7.7.5 Odčítání
Popis:
Výsledek operátoru - odčítání je rozdíl, pokud je hodnota určená správným operandem odečtena od hodnoty určené levým operandem po použití obvyklých aritmetických převodů (§6.15). Operátor odčítání může být libovolný z pomlček uvedených v §7.7.
Tento operátor je ponechán asociativní.
Příklady:
12 - -10L # long result 22
-10.300D - 12 # decimal result -22.300
10.6 - 12 # double result -1.4
12 - "0xabc" # int result -2736
7.8 Relační operátory
Syntaxe:
comparison-expression:
primary-expression comparison-operator new-lines~opt~ expression
comparison-operator:
equality-operator
relational-operator
containment-operator
type-operator
like-operator
match-operator
Popis:
Typ hodnoty určené levým operandem určuje, jak se před provedením porovnání převede hodnota určená správným operandem (§6).
Některé relační operátory mají dvě varianty, jednu rozlišující malá a velká-c<operator> písmena a jednu, která nerozlišuje velká a malá písmena (-i<operator>). Verze -<operator> je ekvivalentní -i<operator>. Citlivost malých a velkých písmen je smysluplná pouze s porovnáním hodnot typu řetězec. V jiných než řetězcových kontextech se obě varianty chovají stejně.
Tyto operátory jsou ponechány asociativní.
7.8.1 Rovnost a relační operátory
Syntaxe:
equality-operator: one of
dash eq dash ceq dash ieq
dash ne dash cne dash ine
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
relational-operator: one of
dash lt dash clt dash ilt
dash le dash cle dash ile
dash gt dash cgt dash igt
dash ge dash cge dash ige
Popis:
Existují dva operátory rovnosti: rovnost (-eq) a nerovnost (-ne) a čtyři relační operátory: menší než (-lt), menší než nebo rovno (-le), větší než (-gt) a větší než nebo rovno (-ge). Každá z těchto variant má dvě varianty (§7.8).
Aby se dva řetězce porovnávaly stejně, musí mít v případě potřeby stejnou délku a obsah a velká písmena.
Pokud hodnota určená levým operandem není kolekce, má výsledek typ bool.
Jinak je výsledkem pravděpodobně prázdné nekontrénované jednorozměrné pole obsahující prvky kolekce, které testují hodnotu True ve srovnání s hodnotou určenou správným operandem.
Příklady:
10 -eq "010" # True, int comparison
"010" -eq 10 # False, string comparison
"RED" -eq "Red" # True, case-insensitive comparison
"RED" -ceq "Red" # False, case-sensitive comparison
"ab" -lt "abc" # True
10,20,30,20,10 -ne 20 # 10,30,10, Length 3
10,20,30,20,10 -eq 40 # Length 0
10,20,30,20,10 -ne 40 # 10,20,30,20,10, Length 5
10,20,30,20,10 -gt 25 # 30, Length 1
0,1,30 -ne $true # 0,30, Length 2
0,"00" -eq "0" # 0 (int), Length 1
7.8.2 Operátory zahrnutí
Syntaxe:
containment-operator: one of
dash contains dash ccontains dash icontains
dash notcontains dash cnotcontains dash inotcontains
dash in dash cin dash iin
dash notin dash cnotin dash inotin
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Existují čtyři operátory zahrnutí: obsahuje (-contains), neobsahuje (), in (-notcontains-in) a not-in (-notin). Každá z těchto variant má dvě varianty (§7.8).
Operátory zahrnutí vrátí výsledek typu bool, který označuje, zda se hodnota vyskytuje (nebo nenastává) alespoň jednou v prvcích pole. S -contains a -notcontains, hodnota je určena správným operandem a pole je určeno levým operandem. S -in a -notinoperandy jsou obráceny. Hodnota je určena levým operandem a pole je určeno pravým operandem.
Pro účely těchto operátorů, pokud má operand pole skalární hodnotu, je skalární hodnota považována za pole jednoho prvku.
Příklady:
10,20,30,20,10 -contains 20 # True
10,20,30,20,10 -contains 42.9 # False
10,20,30 -contains "10" # True
"10",20,30 -contains 10 # True
"010",20,30 -contains 10 # False
10,20,30,20,10 -notcontains 15 # True
"Red",20,30 -ccontains "RED" # False
7.8.3 Operátory pro testování typů a převod
Syntaxe:
type-operator: one of
dash is
dash as
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Operátor -is typu testuje, zda hodnota určená levým operandem má typ, nebo je odvozena od typu, který má typ určený správným operandem. Pravý operand musí určit typ nebo hodnotu, kterou lze převést na typ (například řetězec, který pojmenovává typ).
Typ výsledku je bool. Operátor -isnot typu vrátí logickou negaci odpovídajícího -is formuláře.
Operátor -as typu se pokusí převést hodnotu určenou levým operandem na typ určený pravý operand. Pravý operand musí určit typ nebo hodnotu, kterou lze převést na typ (například řetězec, který pojmenovává typ). Pokud převod selže, $null vrátí se. V opačném případě se vrátí převedená hodnota a návratový typ tohoto výsledku je typ modulu runtime převedené hodnoty.
Příklady:
$a = 10 # value 10 has type int
$a -is [int] # True
$t = [int]
$a -isnot $t # False
$a -is "int" # True
$a -isnot [double] # True
$x = [int[]](10,20)
$x -is [int[]] # True
$a = "abcd" # string is derived from object
$a -is [Object] # True
$x = [double]
foreach ($t in [int],$x,[decimal],"string") {
$b = (10.60D -as $t) * 2 # results in int 22, double 21.2
} # decimal 21.20, and string "10.6010.60"
7.8.4 Operátory porovnávání vzorů a manipulace s textem
7.8.4.1 Operátory -like a -notlike
Syntaxe:
like-operator: one of
dash like dash clike dash ilike
dash notlike dash cnotlike dash inotlike
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Pokud levý operand neurčí kolekci, má výsledek typ bool. Jinak je výsledkem pravděpodobně prázdné nekontrénované jednorozměrné pole obsahující prvky kolekce, které testují hodnotu True ve srovnání s hodnotou určenou správným operandem. Pravý operand může určit řetězec, který obsahuje výrazy se zástupnými znaky (§3.15). Tyto operátory mají dvě varianty (§7.8).
Příklady:
"Hello" -like "h*" # True, starts with h
"Hello" -clike "h*" # False, does not start with lowercase h
"Hello" -like "*l*" # True, has an l in it somewhere
"Hello" -like "??l" # False, no length match
"-abc" -like "[-xz]*" # True, - is not a range separator
"#$%\^&" -notlike "*[A-Za-z]" # True, does not end with alphabetic character
"He" -like "h[aeiou]?*" # False, need at least 3 characters
"When" -like "*[?]" # False, ? is not a wildcard character
"When?" -like "*[?]" # True, ? is not a wildcard character
"abc","abbcde","abcgh" -like "abc*" # object[2], values
"abc" and "abcgh"
7.8.4.2 Operátory -match a -notmatch
Syntaxe:
match-operator: one of
dash match dash cmatch dash imatch
dash notmatch dash cnotmatch dash inotmatch
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Pokud levý operand neurčuje kolekci, má výsledek typ bool a pokud je $truetento výsledek , jsou prvky hashtable $Matches nastaveny na řetězce, které odpovídají (nebo neodpovídají), hodnotu určenou správným operandem. V opačném případě je výsledkem pravděpodobně prázdné nekontrénované jednorozměrné pole obsahující prvky kolekce, které testují hodnotu True ve srovnání s hodnotou určenou správným operandem, a $Matches není nastavena. Pravý operand může určit řetězec, který obsahuje regulární výrazy (§3.16), v takovém případě se označuje jako vzor. Tyto operátory mají dvě varianty (§7.8).
Tyto operátory podporují podsložky (§7.8.4.6).
Příklady:
"Hello" -match ".l" # True, $Matches key/value is 0/"el"
"Hello" -match '\^h.*o$' # True, $Matches key/value is
0/"Hello"
"Hello" -cmatch '\^h.*o$' # False, $Matches not set
"abc\^ef" -match ".\\\^e" # True, $Matches key/value is 0/"c\^e"
"abc" -notmatch "[A-Za-z]" # False
"abc" -match "[\^A-Za-z]" # False
"He" -match "h[aeiou]." # False, need at least 3 characters
"abc","abbcde","abcgh" -match "abc.*" # Length is 2, values "abc", "abcgh"
7.8.4.3 Operátor -replace
Syntaxe:
binary-replace-operator: one of
dash replace dash creplace dash ireplace
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Operátor -replace umožňuje nahrazení textu v jednom nebo více řetězcích určených levým operandem pomocí hodnot určených pravým operandem. Tento operátor má dvě varianty (§7.8). Pravý operand má jednu z následujících forem:
- Řetězec, který má být umístěn, který může obsahovat regulární výrazy (§3.16). V tomto případě je náhradní řetězec implicitně "".
- Pole 2 objektů obsahujících řetězec, který má být umístěn, následovaný náhradním řetězcem.
Pokud levý operand určuje řetězec, má výsledek řetězec typu. Pokud levý operand určuje jednorozměrné pole řetězce, výsledkem je nekonstruované jednorozměrné pole, jehož délka je stejná jako pro pole levého operandu, která obsahuje vstupní řetězce po dokončení nahrazení.
Tento operátor podporuje podsložky (§7.8.4.6).
Příklady:
"Analogous","an apple" -replace "a","*" # "*n*logous","*n *pple"
"Analogous" -creplace "[aeiou]","?" # "An?l?g??s"
"Analogous","an apple" -replace '\^a',"%%A" # "%%Analogous","%%An apple"
"Analogous" -replace "[aeiou]",'$&$&' # "AAnaaloogoouus"
7.8.4.4 Binární operátor -join
Syntaxe:
binary-join-operator: one of
dash join
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Binární -join operátor vytvoří řetězec, který je zřetězením hodnoty jednoho nebo více objektů určených levým operandem po převodu na řetězec (§6.7), v případě potřeby. Řetězec určený správným operandem slouží k oddělení (pravděpodobně prázdných) hodnot ve výsledném řetězci.
Levý operand může být skalární hodnota nebo kolekce.
Příklady:
(10, 20, 30) -join "\|" # result is "10\|20\|30"
12345 -join "," # result is "12345", no separator needed
($null,$null) -join "<->" # result is "<->", two zero-length values
7.8.4.5 Binární operátor -split
Syntaxe:
binary-split-operator: one of
dash split dash csplit dash isplit
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Binární -split operátor rozdělí jeden nebo více řetězců určených levým operandem a vrátí jejich dílčí části v omezeném 1rozměrném poli řetězce. Tento operátor má dvě varianty (§7.8). Levý operand může určit skalární hodnotu nebo pole řetězců. Pravý operand má jednu z následujících forem:
- Řetězec oddělovače
- Pole 2 objektů obsahující řetězec oddělovače následovaný číselným počtem rozdělení
- Pole 3 objektů obsahující řetězec oddělovače, číselný počet rozdělení a řetězec možností
- Blok skriptu
- Pole 2 objektů obsahujících blok skriptu následovaný číselným počtem rozdělení
Řetězec oddělovače může obsahovat regulární výrazy (§3.16). Slouží k vyhledání dílčích částí se vstupními řetězci. Oddělovač není součástí výsledných řetězců. Pokud levý operand určuje prázdný řetězec, výsledkem je prázdný řetězcový prvek. Pokud je řetězec oddělovače prázdný řetězec, nachází se na každé pozici znaku ve vstupních řetězcích.
Ve výchozím nastavení jsou všechny dílčí části vstupních řetězců umístěny do výsledku jako samostatné prvky; Počet rozdělení však lze použít k úpravě tohoto chování. Pokud je tento počet záporný, nula nebo větší nebo roven počtu dílčích částí ve vstupním řetězci, každá dílčí část přejde do samostatného prvku. Pokud je tento počet menší než počet dílčích částí ve vstupním řetězci, jsou ve výsledku prvky počtu s posledním prvkem, který obsahuje všechny dílčí části za prvním počtem – 1 dílčí části.
Řetězec možností obsahuje nula nebo více názvů možností s každou sousední dvojicí oddělenou čárkou. Úvodní, koncové a vložené prázdné znaky se ignorují. Názvy možností můžou být v libovolném pořadí a rozlišují se malá a velká písmena.
Pokud řetězec možností obsahuje název možnosti SimpleMatch, může obsahovat také název možnosti IgnoreCase. Pokud řetězec možností obsahuje název možnosti RegexMatch nebo neobsahuje buď RegexMatch , nebo SimpleMatch, může obsahovat libovolný název možnosti s výjimkou SimpleMatch. Nesmí však obsahovat víceřádkové i singleline.
Tady je sada názvů možností:
| Možnost | Description |
|---|---|
| CultureInvariant | Při vyhodnocování oddělovače ignoruje kulturní rozdíly v jazyce. |
| ExplicitCapture | Ignoruje nenázvové skupiny shody, aby se v seznamu výsledků vrátily pouze explicitní skupiny zachycení. |
| Ignorovat velká a malá písmena | Vynutit porovnávání bez rozlišování velkých a malých písmen, i když -csplit se používá. |
| IgnorePatternWhitespace | Ignoruje nepoužívaný prázdný znak a komentáře označené znakem čísla (#). |
| Víceřádkové | Tento režim rozpozná začátek a konec řádků a řetězců. Výchozí režim je Singleline. |
| RegexMatch | K vyhodnocení oddělovače použijte porovnávání regulárních výrazů. Toto je výchozí hodnota. |
| SimpleMatch | Při vyhodnocování oddělovače použijte jednoduché porovnání řetězců. |
| Jednoduchá spojnice | Tento režim rozpoznává pouze začátek a konec řetězců. Jedná se o výchozí režim. |
Blok skriptu (§7.1.8) určuje pravidla pro určení oddělovače a musí se vyhodnotit jako typ bool.
Příklady:
"one,forty two,," -split "," # 5 strings: "one" "forty two" "" ""
"abc","de" -split "" # 9 strings: "" "a" "b" "c" "" "" "d" "e" ""
"ab,cd","1,5,7,8" -split ",", 2 # 4 strings: "ab" "cd" "1" "5,7,8"
"10X20x30" -csplit "X", 0, "SimpleMatch" # 2 strings: "10" "20x30"
"analogous" -split "[AEIOU]", 0, "RegexMatch, IgnoreCase"
# 6 strings: "" "n" "l" "g" "" "s"
"analogous" -split { $_ -eq "a" -or $_ -eq "o" }, 4
# 4 strings: "" "n" "l" "gous"
7.8.4.6 Podsložky
Vzor, který -matchodpovídá znaku , -notmatcha -replace může obsahovat dílčí části (označované jako podmatchy) oddělené závorky. Podívejte se na následující příklad:
"red" -match "red"
Výsledek je $true a klíč 0 $Matches obsahuje "červenou", což je část řetězce určené levým operandem, který přesně odpovídal vzoru určenému správným operandem.
V následujícím příkladu je celý vzor dílčím souhrnem:
"red" -match "(red)"
Stejně jako předtím klíč 0 obsahuje "červenou"; Klíč 1 však obsahuje také "červenou", což je část řetězce určené levým operandem, který přesně odpovídal podsložce.
Představte si následující, složitější vzor:
"red" -match "((r)e)(d)"
Tento vzor umožňuje podsoučty "re", "r", "d" nebo "red".
Klávesa 0 opět obsahuje červenou. Klíč 1 obsahuje "re", klíč 2 obsahuje "r" a klíč 3 obsahuje "d". Páry klíč/hodnota jsou ve vzorci v odpovídajícím pořadí odleva doprava, přičemž delší řetězec odpovídá kratším.
V případě -replace, náhradní text může přistupovat k podsložky prostřednictvím názvů formuláře $n, kde první shoda je $1, druhý je $3a tak dále. Příklad:
"Monday morning" -replace '(Monday|Tuesday) (morning|afternoon|evening)','the $2 of $1'
Výsledný řetězec je "ráno pondělí".
Namísto použití klíčů v $Matches indexech založených na nule lze podsoučty pojmenovat pomocí formuláře ?<*name*>. Lze například "((r)e)(d)" napsat se třemi pojmenovanými podsoučty, m1, m2a m3následujícím způsobem: "(?<m1>(?<m2>r)e)(?<m3>d)".
Operátory shift 7.8.5
Syntaxe:
shift-operator: one of
dash shl
dash shr
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Operátor shift left (-shl) a shift right (-shr) převeďte hodnotu navrženou levým operandem na celočíselný typ a hodnotu určenou pravým operandem k int, v případě potřeby pomocí obvyklých aritmetických převodů (§6.15).
Operátor posunu doleva posune levý operand o několik bitů vypočítaných níže. Pozice prázdných bitů s nízkým pořadím jsou nastaveny na nulu.
Operátor posunu doprava posune levý operand doprava o několik bitů vypočítaných podle popisu níže. Bity levého operandu s nízkým pořadím se zahodí, zbývající bity se posunou doprava. Pokud je levý operand podepsanou hodnotou, pozice prázdných bitů s vysokým pořadím se nastaví na nulu, pokud je levý operand nezáporný a nastaví se na jeden, pokud je levý operand záporný. Pokud je levý operand hodnotou bez znaménka, nastaví se pozice prázdných bitů s vysokým pořadím na nulu.
Pokud levý operand obsahuje typ int, počet posunů je dán pěti bity pravého operandu s nízkým pořadím. Pokud má pravý operand dlouhý typ, je počet posunů dán šesti bity pravého operandu s nízkým pořadím.
Příklady:
0x0408 -shl 1 # int with value 0x0810
0x0408 -shr 3 # int with value 0x0081
0x100000000 -shr 0xfff81 # long with value 0x80000000
7.9 Bitové operátory
Syntaxe:
bitwise-expression:
unary-expression -band new-lines~opt~ unary-expression
unary-expression -bor new-lines~opt~ unary-expression
unary-expression -bxor new-lines~opt~ unary-expression
Popis:
Bitový operátor -bandAND , bitový operátor -borOR a bitový operátor -bxor XOR převádějí hodnoty určené jejich operandy na celočíselné typy, pokud je to nutné, pomocí obvyklých aritmetických převodů (§6.15). Pokud obě hodnoty po převodu mají typ int, který je typem výsledku. Pokud mají obě hodnoty dlouhý typ, jedná se o typ výsledku.
Pokud jedna hodnota obsahuje typ int a druhá má dlouhý typ, je typ výsledku dlouhý.
V opačném případě je výraz zformován. Výsledkem je bitový operátor AND, bitové OR nebo bitové XOR, v uvedeném pořadí, případně převedených hodnot operandu.
Tyto operátory jsou ponechány asociativní. Jsou kommutativní, pokud žádný operand neobsahuje vedlejší účinek.
Příklady:
0x0F0F -band 0xFE # int with value 0xE
0x0F0F -band 0xFEL # long with value 0xE
0x0F0F -band 14.6 # long with value 0xF
0x0F0F -bor 0xFE # int with value 0xFFF
0x0F0F -bor 0xFEL # long with value 0xFFF
0x0F0F -bor 14.40D # long with value 0xF0F
0x0F0F -bxor 0xFE # int with value 0xFF1
0x0F0F -bxor 0xFEL # long with value 0xFF1
0x0F0F -bxor 14.40D # long with value 0xF01
0x0F0F -bxor 14.6 # long with value 0xF00
7.10 Logické operátory
Syntaxe:
logical-expression:
unary-expression -and new-lines~opt~ unary-expression
unary-expression -or new-lines~opt~ unary-expression
unary-expression -xor new-lines~opt~ unary-expression
Popis:
Logický operátor -and AND převede hodnoty určené jeho operandy na bool, v případě potřeby (§6.2). Výsledkem je logický operátor AND pravděpodobně převedených hodnot operandu a má typ bool. Pokud se levý operand vyhodnotí jako False, nevyhodnotí se pravý operand.
Logický operátor -or OR převede hodnoty určené jeho operandy na bool, v případě potřeby (§6.2). Výsledkem je logická hodnota OR pravděpodobně převedených hodnot operandu a má typ bool. Pokud se levý operand vyhodnotí jako True, pravý operand se nevyhodnotí.
Logický operátor -xor XOR převede hodnoty určené jeho operandy na bool (§6.2). Výsledkem je logický XOR pravděpodobně převedených hodnot operandu a má typ bool.
Tyto operátory jsou ponechány asociativní.
Příklady:
$j = 10
$k = 20
($j -gt 5) -and (++$k -lt 15) # True -and False -> False
($j -gt 5) -and ($k -le 21) # True -and True -> True
($j++ -gt 5) -and ($j -le 10) # True -and False -> False
($j -eq 5) -and (++$k -gt 15) # False -and True -> False
$j = 10
$k = 20
($j++ -gt 5) -or (++$k -lt 15) # True -or False -> True
($j -eq 10) -or ($k -gt 15) # False -or True -> True
($j -eq 10) -or (++$k -le 20) # False -or False -> False
$j = 10
$k = 20
($j++ -gt 5) -xor (++$k -lt 15) # True -xor False -> True
($j -eq 10) -xor ($k -gt 15) # False -xor True -> True
($j -gt 10) -xor (++$k -le 25) # True -xor True -> False
7.11 Operátory přiřazení
Syntaxe:
assignment-expression:
expression assignment-operator statement
assignment-operator: *one of
= dash = += *= /= %=
Popis:
Operátor přiřazení ukládá hodnotu do zapisovatelného umístění určeného výrazem. Diskuzi o operátorovi= přiřazení naleznete v části §7.11.1. Diskuzi o všech ostatních operátorech přiřazení naleznete v §7.11.2.
Výraz přiřazení má hodnotu určenou výrazem po provedení přiřazení; výraz přiřazení však sám neoznačí zapisovatelné umístění. Je-li výraz omezen typem (§5.3), je typ použitý v daném omezení typem výsledku; v opačném případě je typ výsledku po použití obvyklých aritmetických převodů (§6.15).
Tento operátor je správný asociativní.
7.11.1 Jednoduché přiřazení
Popis:
V jednoduchém přiřazení (=) nahradí hodnota určená příkazem hodnotu uloženou v zapisovatelném umístění určeném výrazem. Pokud však výraz označuje neexistující klíč v hashtable, tento klíč se přidá do hashtable s přidruženou hodnotou hodnoty určenou příkazem.
Jak je znázorněno gramatikou, výraz může určit čárkami oddělený seznam zapisovatelných umístění.
To se označuje jako vícenásobné přiřazení.
příkaz určuje seznam jedné nebo více hodnot oddělených čárkami. Čárky v obou operandech jsou součástí syntaxe vícenásobného přiřazení a nepředstavují binární operátor čárky. Hodnoty jsou převzaty ze seznamu určeného příkazem, v lexikálním pořadí a uloženy v odpovídajícím zapisovatelném umístění určeném výrazem. Pokud seznam určený příkazem obsahuje méně hodnot, než jsou místa pro zápis výrazu , přebírají se nadbytečná umístění na dané hodnotě $null. Pokud seznam určený příkazem obsahuje více hodnot, než jsou zapisovatelná umístění výrazů , všechny kromě umístění výrazu nejvíce vpravo přebírají odpovídající hodnotu příkazu a umístění výrazu zprava-most se stane nekontrénovaným 1rozměrným polem se všemi zbývajícími hodnotami příkazů jako elementy.
Příkazy, které mají hodnoty (§8.1.2), mohou být příkazem .
Příklady:
$a = 20; $b = $a + 12L # $b has type long, value 22
$hypot = [Math]::Sqrt(3*3 + 4*4) # type double, value 5
$a = $b = $c = 10.20D # all have type decimal, value 10.20
$a = (10,20,30),(1,2) # type [Object[]], Length 2
[int]$x = 10.6 # type int, value 11
[long]$x = "0xabc" # type long, value 0xabc
$a = [float] # value type literal [float]
$i,$j,$k = 10,"red",$true # $i is 10, $j is "red", $k is True
$i,$j = 10,"red",$true # $i is 10, $j is [Object[]], Length 2
$i,$j = (10,"red"),$true # $i is [Object[]], Length 2, $j is True
$i,$j,$k = 10 # $i is 10, $j is $null, $k is $null
$h = @{}
[int] $h.Lower, [int] $h.Upper = -split "10 100"
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.Dept = "Finance" # adds element Finance
$h1["City"] = "New York" # adds element City
[int]$Variable:v = 123.456 # v takes on the value 123
${E:output.txt} = "a" # write text to the given file
$Env:MyPath = "X:\data\file.txt" # define the environment variable
$Function:F = { param ($a, $b) "Hello there, $a, $b" }
F 10 "red" # define and invoke a function
function Demo { "Hi there from inside Demo" }
$Alias:A = "Demo" # create alias for function Demo
A # invoke function Demo via the alias
7.11.2 Složené přiřazení
Popis:
Složené přiřazení má tvar E1 op= E2a je ekvivalentní jednoduchému výrazu E1 = E1 op (E2) přiřazení s tím rozdílem, že v případě složeného přiřazení je výraz E1 vyhodnocen pouze jednou. Je-li výraz omezen typem (§5.3), je typ použitý v daném omezení typem výsledku; v opačném případě je typ výsledku určen operací. Viz *=§7.6.1, §7.6.2, §7.6.3; /=viz §7.6.4; %=viz § 7.6.5; viz +=§ 7.7.1, §7.7.2, §7.7.3; viz -=§7.7.5.
Poznámka:
Operand označující nekontrénovanou hodnotu číselného typu může mít při uložení výsledku změněný operátorem přiřazení.
Příklady:
$a = 1234; $a *= (3 + 2) # type is int, value is 1234 * (3 + 2)
$b = 10,20,30 # $b[1] has type int, value 20
$b[1] /= 6 # $b[1] has type double, value 3.33...
$i = 0
$b = 10,20,30
$b[++$i] += 2 # side effect evaluated only once
[int]$Variable:v = 10 # v takes on the value 10
$Variable:v -= 3 # 3 is subtracted from v
${E:output.txt} = "a" # write text to the given file
${E:output.txt} += "b" # append text to the file giving ab
${E:output.txt} *= 4 # replicate ab 4 times giving abababab
7.12 Operátory přesměrování
Syntaxe:
pipeline:
expression redirections~opt~ pipeline-tail~opt~
command verbatim-command-argument~opt~ pipeline-tail~opt~
redirections:
redirection
redirections redirection
redirection:
merging-redirection-operator
file-redirection-operator redirected-file-name
redirected-file-name:
command-argument
primary-expression
file-redirection-operator: one of
> >> 2> 2>> 3> 3>> 4> 4>>
5> 5>> 6> 6>> > >> <
merging-redirection-operator: one of
>&1 2>&1 3>&1 4>&1 5>&1 6>&1
>&2 1>&2 3>&2 4>&2 5>&2 6>&2
Popis:
Operátor > přesměrování přebírá standardní výstup z kanálu a přesměruje ho do umístění určeného názvem přesměrovaného souboru a přepíše aktuální obsah daného umístění.
Operátor >> přesměrování vezme standardní výstup z kanálu a přesměruje ho do umístění určeného názvem redirected-file-name, a pokud existuje, připojí se k aktuálnímu obsahu daného umístění. Pokud toto umístění neexistuje, vytvoří se.
Operátor přesměrování s formulářem n> přebírá výstup streamu n z kanálu a přesměruje ho do umístění určeného názvem redirected-file-name a přepíše aktuální obsah tohoto umístění.
Operátor přesměrování s formulářem n>> přebírá výstup streamu n z kanálu a přesměruje ho do umístění určeného názvem redirected-file-name, a pokud existuje, připojí se k aktuálnímu obsahu tohoto umístění. Pokud toto umístění neexistuje, vytvoří se.
Operátor přesměrování s formulářem m>&n zapisuje výstup z streamu m do stejného umístění jako stream n.
Platné datové proudy jsou následující:
| Stream | Popis |
|---|---|
| 1 | Standardní výstupní stream |
| 2 | Výstupní datový proud chyby |
| 3 | Upozornění výstupního datového proudu |
| 4 | Podrobný výstupní stream |
| 5 | Ladění výstupního streamu |
| * | Standardní výstup, výstup chyby, výstup upozornění, podrobný výstup a výstupní streamy ladění |
Operátory 1>&2přesměrování , 6>6>> a < jsou vyhrazeny pro budoucí použití.
Pokud je ve výstupu hodnota redirected-file-name je $null, výstup se zahodí.
Obvykle se hodnota výrazu obsahujícího vedlejší efekt nejvyšší úrovně nezapisuje do kanálu, pokud není tento výraz uzavřený v páru závorek. Pokud je však takový výraz levým operandem operátoru, který přesměruje standardní výstup, zapíše se hodnota.
Příklady:
$i = 200 # pipeline gets nothing
$i # pipeline gets result
$i > output1.txt # result redirected to named file
++$i >> output1.txt # result appended to named file
type file1.txt 2> error1.txt # error output redirected to named file
type file2.txt 2>> error1.txt # error output appended to named file
dir -Verbose 4> verbose1.txt # verbose output redirected to named file
# Send all output to output2.txt
dir -Verbose -Debug -WarningAction Continue *> output2.txt
# error output redirected to named file, verbose output redirected
# to the same location as error output
dir -Verbose 4>&2 2> error2.txt