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.
2.1 Gramatiky
Tato specifikace zobrazuje syntaxi jazyka PowerShellu pomocí dvou gramatik. lexikální gramatika (§B.1) ukazuje, jak se znaky Unicode kombinují tak, aby vytvořily ukončovací čáry, komentáře, prázdné znaky a tokeny. syntaktická gramatika (§B.2) ukazuje, jak se tokeny, které jsou výsledkem lexikální gramatiky, kombinují k vytvoření skriptů PowerShellu.
Pro usnadnění jsou fragmenty této gramatiky opakovány na příslušných místech v rámci této specifikace.
Jakékoli použití znaků "a" až "z" v gramatických gramatikách nerozlišuje malá a velká písmena. To znamená, že písmena v proměnných, aliasech, názvech funkcí, klíčových slovech, příkazech a operátorech se ignorují. V této specifikaci jsou však tyto názvy napsané malými písmeny, s výjimkou některých automatických a předvolbových proměnných.
2.2 Lexikální analýza
2.2.1 Skripty
Syntax:
Spropitné
Zápis ~opt~ v definicích syntaxe označuje, že lexikální entita je v syntaxi nepovinná.
input:
input-elements~opt~ signature-block~opt~
input-elements:
input-element
input-elements input-element
input-element:
whitespace
comment
token
signature-block:
signature-begin signature signature-end
signature-begin:
new-line-character # SIG # Begin signature block new-line-character
signature:
base64 encoded signature blob in multiple single-line-comments
signature-end:
new-line-character # SIG # End signature block new-line-character
Popis:
Vstupní zdrojový stream do překladače PowerShellu je vstup a ve skriptu, který obsahuje posloupnost znaků Unicode. Lexikální zpracování tohoto datového proudu zahrnuje snížení těchto znaků do posloupnosti tokenů, které se stanou vstupem syntaktické analýzy.
Skript je skupina příkazů PowerShellu uložených v souboru skriptu. ** Samotný skript nemá žádný název a přebírá svůj název ze zdrojového souboru. Konec tohoto souboru označuje konec skriptu.
Skript může volitelně obsahovat digitální podpis. Hostitelské prostředí není nutné zpracovávat žádný text, který následuje za podpisem nebo cokoli, co vypadá jako podpis. Na vytváření a používání digitálních podpisů se tato specifikace nevztahuje.
2.2.2 Ukončovací čáry
Syntax:
new-line-character:
Carriage return character (U+000D)
Line feed character (U+000A)
Carriage return character (U+000D) followed by line feed character (U+000A)
new-lines:
new-line-character
new-lines new-line-character
Popis:
Přítomnost znak nového řádkus ve vstupním zdrojovém datovém proudu dělí ho na řádky, které lze použít například pro hlášení chyb a detekci konce jednořádkového komentáře.
Řádkový ukončovač lze považovat za prázdný znak (§2.2.4).
2.2.3 Komentáře
Syntax:
comment:
single-line-comment
requires-comment
delimited-comment
single-line-comment:
# input-characters~opt~
input-characters:
input-character
input-characters input-character
input-character:
Any Unicode character except a new-line-character
requires-comment:
#Requires whitespace command-arguments
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
dashdash:
dash dash
delimited-comment:
< # delimited-comment-text~opt~ hashes >
delimited-comment-text:
delimited-comment-section
delimited-comment-text delimited-comment-section
delimited-comment-section:
>
hashes~opt~ not-greater-than-or-hash
hashes:
#
hashes #
not-greater-than-or-hash:
Any Unicode character except > or #
Popis:
Poznámky ve zdrojovém kódu mohou být přidány pomocí komentářů .
jednořádkový komentář začíná znakem # a končí znakem nového řádku .
Komentář se považuje za prázdné místo.
Výše uvedené produkce naznačují, že
- Komentáře nelze vnořovat.
- Sekvence znaků <# a #> nemají v jednom řádku žádný zvláštní význam.
- Znak # nemá žádný zvláštní význam v ohraničeném komentáři.
Lexikální gramatika znamená, že komentáře nemohou nastat uvnitř tokenů.
(Informace viz §A ohledně vytváření skriptových souborů, které obsahují speciálně označené komentáře používané k vytváření dokumentace ze skriptových souborů.)
vyžaduje komentář k, který určuje kritéria, jež musí být splněna, aby byl umožněn běh skriptu, kterého je součástí. Primárním kritériem je verze PowerShellu, která se používá ke spuštění skriptu. Minimální požadavek na verzi je určen takto:
#Requires -Version N[.n]
Kde N je (povinná) hlavní verze a n je (volitelná) podverze.
vyžaduje-komentář může být přítomen v libovolném souboru skriptu; nemůže však být přítomen uvnitř funkce nebo cmdletu. Musí to být první položka na zdrojovém řádku. Skript může obsahovat více vyžaduje komentářs.
Sekvence znaků je rozpoznána pouze jako komentář, pokud tato sekvence začíná # nebo <#. Hello#se například považuje za jeden token, zatímco hello #there se považuje za token hello následovaný jedním řádkovým komentářem. Stejně jako po bílých znacích, může počáteční sekvenci komentáře také předcházet jakýkoli znak ukončení výrazu nebo příkazu (například ), }, ], ', "nebo ;).
Do modulu snap-in nemůže být vložen vyžadující komentář.
Existují čtyři další formy , které vyžadují komentář:
#Requires -Assembly AssemblyId
#Requires -Module ModuleName
#Requires -PSSnapin PSSnapin [ -Version *N* [.n] ]
#Requires -ShellId ShellId
2.2.4 Prázdné místo
Syntax:
whitespace:
Any character with Unicode class Zs, Zl, or Zp
Horizontal tab character (U+0009)
Vertical tab character (U+000B)
Form feed character (U+000C)
` (The backtick character U+0060) followed by new-line-character
Popis:
Mezery se skládají z libovolné sekvence jednoho nebo více prázdných znaků.
S výjimkou faktu, že prázdné znaky mohou fungovat jako oddělovač tokenů, jsou ignorovány.
Na rozdíl od některých oblíbených jazyků PowerShell nepovažuje za prázdné znaky ukončovací znaky (§2.2.2). Ukončovací znak řádku však může být považován za prázdný znak, pokud je bezprostředně předcházen znakem základní čárky, ` (U+0060). To je nezbytné, pokud je obsah řádku syntakticky dokončený, ale následující řádek obsahuje tokeny, které mají být přidruženy k předchozímu řádku. Například
$number = 10 # assigns 10 to $number; nothing is written to the pipeline
+ 20 # writes 20 to the pipeline
- 50 # writes -50 to the pipeline
$number # writes $number's value, 10, to the pipeline
V tomto příkladu backtick označuje pokračování zdrojového řádku. Následující výraz je ekvivalentní $number = 10 + 20 - 50.
$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20
2.3 Tokeny
Syntax:
token:
keyword
variable
command
command-parameter
command-argument-token
integer-literal
real-literal
string-literal
type-literal
operator-or-punctuator
Popis:
Token je nejmenší lexikální prvek v jazyce PowerShellu.
Tokeny je možné oddělit novými řádky, komentáři, mezerami nebo jejich kombinací.
2.3.1 Klíčová slova
Syntax:
keyword: one of
begin break catch class
continue data define do
dynamicparam else elseif end
exit filter finally for
foreach from function if
in inlinescript parallel param
process return switch throw
trap try until using
var while workflow
Popis:
Klíčové slovo je posloupnost znaků, která má zvláštní význam, když je použita na místě závislém na kontextu. Nejčastěji se jedná o první token v příkazu ; existují však další místa, jak je uvedeno gramatikou. (Token, který vypadá jako klíčové slovo, ale nepoužívá se v kontextu klíčového slova, je název příkazu nebo argument příkazu.)
Klíčová slova class, define, from, usinga var jsou vyhrazena pro budoucí použití.
Poznámka
Poznámka editoru: Klíčová slova class a using byla zavedena v PowerShellu 5.0. Viz o třídách a o používání.
2.3.2 Proměnné
Syntax:
variable:
$$
$?
$^
$ variable-scope~opt~ variable-characters
@ variable-scope~opt~ variable-characters
braced-variable
braced-variable:
${ variable-scope~opt~ braced-variable-characters }
variable-scope:
Global:
Local:
Private:
Script:
Using:
Workflow:
variable-namespace
variable-namespace:
variable-characters :
variable-characters:
variable-character
variable-characters variable-character
variable-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
_ (The underscore character U+005F)
?
braced-variable-characters:
braced-variable-character
braced-variable-characters braced-variable-character
braced-variable-character:
Any Unicode character except
} (The closing curly brace character U+007D)
` (The backtick character U+0060)
escaped-character
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Popis:
Proměnné jsou podrobně popsány v (§5). Proměnná $? je popsáno v §2.3.2.2. Rozsahy jsou popsány v §3.5.
Proměnné $$ a $^ jsou vyhrazené pro použití v interaktivním prostředí, které je mimo rozsah této specifikace.
Existují dva způsoby zápisu názvu proměnné: název uzavřený ve složených závorkách, který začíná $, následovaný sadou oddělenou složenými závorkami, která obsahuje jeden nebo více téměř libovolných znaků; a běžný název proměnné, který také začíná $, následovaný sadou jednoho nebo více znaků z více omezené sady než dovoluje název uzavřený ve složených závorkách. Každý běžný název proměnné lze vyjádřit pomocí odpovídajícího názvu složených proměnných.
$totalCost
$Maximum_Count_26
$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)
${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}
Délka názvu proměnné není nijak omezena, všechny znaky v názvu proměnné jsou významné a malá písmena nejsou odlišné.
Existují různé druhy proměnných: uživatelem definované (§ 2.3.2.1), automatické (§2.3.2.2.2) a preference (§2.3.2.3). Všechny mohou koexistovat ve stejném rozsahu (§3.5).
Zvažte následující definici funkce a volání:
function Get-Power ([long]$Base, [int]$Exponent) { ... }
Get-Power 5 3 # $Base is 5, $Exponent is 3
Get-Power -Exponent 3 -Base 5 # " " "
Každý argument se předává po jednotlivých pozicích nebo jménech. Sadu argumentů však lze předat jako skupinu s rozšířením na jednotlivé argumenty zpracovávané prostředím modulu runtime. Toto automatické rozšíření argumentu se označuje jako splatting . Například
$values = 5,3 # put arguments into an array
Get-Power @values
$hash = @{ Exponent = 3; Base = 5 } # put arguments into a Hashtable
Get-Power @hash
function Get-Power2 { Get-Power @args } # arguments are in an array
Get-Power2 -Exponent 3 -Base 5 # named arguments splatted named in
@args
Get-Power2 5 3 # position arguments splatted positionally in @args
Toho dosáhnete tak, že místo @ použijete $ jako první znak předávané proměnné.
Tento zápis lze použít pouze v argumentu příkazu.
Názvy jsou rozděleny do různých oborů názvů, z nichž každý je uložen na virtuální jednotce (§3.1). Například proměnné jsou uloženy na Variable:, proměnné prostředí jsou uloženy na Env:, funkce jsou uloženy na Function:a aliasy jsou uloženy na Alias:. Ke všem těmto názvům lze přistupovat jako k proměnným pomocí oboru názvů proměnných produkce v rozsahu proměnných . Například
function F { "Hello from F" }
$Function:F # invokes function F
Set-Alias A F
$Alias:A # invokes function F via A
$Count = 10
$Variable:Count # accesses variable Count
$Env:PATH # accesses environment variable PATH
Jakékoli použití názvu proměnné s explicitním oborem názvů Variable: odpovídá použití stejného názvu proměnné bez této kvalifikace. Například $v a $Variable:v jsou zaměnitelné.
Proměnné mohou být definovány nejen v jazyce samotném, ale také pomocí rutiny New-Variable.
2.3.2.1 Uživatelem definované proměnné
Pro uživatelem definované proměnné je k dispozici libovolný název proměnné, který je povolený gramatikou, ale nepoužívá se automatickými nebo proměnnými předvoleb.
Uživatelem definované proměnné se vytvářejí a spravují pomocí uživatelem definovaného skriptu.
2.3.2.2 Automatické proměnné
Automatické proměnné ukládají informace o stavu prostředí PowerShell. Jejich hodnoty lze číst v uživatelsky psaných skriptech, ale nelze je zapisovat.
Poznámka
Tabulka původně nalezená v tomto dokumentu byla odebrána, aby se snížila duplicita. Úplný seznam automatických proměnných najdete v tématu about_Automatic_Variables.
2.3.2.3 Proměnné předvoleb
Předvolby proměnných ukládají uživatelské předvolby pro relaci. Jsou vytvořeny a inicializovány prostředím runtime PowerShellu. Jejich hodnoty lze číst a zapisovat do uživatelem napsaného skriptu.
Poznámka
Tabulka původně nalezená v tomto dokumentu byla odebrána, aby se snížila duplicita. Úplný seznam proměnných předvoleb najdete v dokumentaci about_Preference_Variables.
2.3.3 Příkazy
Syntax:
generic-token:
generic-token-parts
generic-token-parts:
generic-token-part
generic-token-parts generic-token-part
generic-token-part:
expandable-string-literal
verbatim-here-string-literal
variable
generic-token-char
generic-token-char:
Any Unicode character except
{ } ( ) ; , | & $
` (The backtick character U+0060)
double-quote-character
single-quote-character
whitespace
new-line-character
escaped-character
generic-token-with-subexpr-start:
generic-token-parts $(
2.3.4 Parametry
Syntax:
command-parameter:
dash first-parameter-char parameter-chars colon~opt~
first-parameter-char:
A Unicode character of classes Lu, Ll, Lt, Lm, or Lo
_ (The underscore character U+005F)
?
parameter-chars:
parameter-char
parameter-chars parameter-char
parameter-char:
Any Unicode character except
{ } ( ) ; , \| & . [
colon
whitespace
new-line-character
colon:
: (The colon character U+003A)
verbatim-command-argument-chars:
verbatim-command-argument-part
verbatim-command-argument-chars verbatim-command-argument-part
verbatim-command-argument-part:
verbatim-command-string
& non-ampersand-character
Any Unicode character except
|
new-line-character
non-ampersand-character:
Any Unicode character except &
verbatim-command-string:
double-quote-character non-double-quote-chars
double-quote-character
non-double-quote-chars:
non-double-quote-char
non-double-quote-chars non-double-quote-char
non-double-quote-char:
Any Unicode character except
double-quote-character
Popis:
Při vyvolání příkazu mohou být informace předány prostřednictvím jednoho nebo více argumentů, jejichž hodnoty jsou přístupné z příkazu prostřednictvím sady odpovídajících parametrů . Proces porovnávání parametrů s argumenty se nazývá vazba parametrů.
Existují tři druhy argumentů:
Switch parameter (§8.10.5) - To má podobu příkazodeskového parametru, kde first-parameter-char a parametr-chars dohromady tvoří název přepínače, odpovídající názvu parametru (bez počátečního
-) v příkazu, který je vyvolán. Pokud je vynechána koncová dvojtečka, přítomnost tohoto argumentu indikuje, že odpovídající parametr je nastaven na$true. Pokud je přítomna koncová dvojtečka, musí argument bezprostředně za ní určit hodnotu typu bool a odpovídající parametr je nastaven na tuto hodnotu. Například následující vyvolání jsou ekvivalentní:Set-MyProcess -Strict Set-MyProcess -Strict: $trueParametr s argumentem (§8.10.2) – má tvar příkazového parametru, kde první-znak-parametru a znaky-parametru společně tvoří název parametru, který odpovídá názvu parametru (bez počátečního '-') v příkazu, který je vyvolán. Nesmí existovat žádná koncová dvojtečka. Argument bezprostředně následující označuje přidruženou hodnotu. Například pro příkaz
Get-Power, který má parametry$Basea$Exponent, jsou ekvivalentní následující vyvolání:Get-Power -Base 5 -Exponent 3 Get-Power -Exponent 3 -Base 5Poziční argument (§8.10.2) – Argumenty a jejich odpovídající parametry uvnitř příkazů mají pozice s první pozicí nula. Argument na pozici 0 je vázán na parametr v pozici 0; argument na pozici 1 je vázán na parametr na pozici 1; a tak dále. Například při příkazu
Get-Power, který má parametry$Basea$Exponentv pozicích 0 a 1, v tomto pořadí, se tento příkaz vyvolá:Get-Power 5 3
Podrobnosti o zvláštních parametrech a --naleznete v --% .
Při vyvolání příkazu může být název parametru zkrácen; lze použít jakoukoli odlišnou úvodní část úplného názvu, pokud je jednoznačná s ohledem na názvy ostatních parametrů přijatých stejným příkazem.
Informace o vazbě parametru naleznete v §8.14.
2.3.5 Literály
Syntax:
literal:
integer-literal
real-literal
string-literal
2.3.5.1 Číselné literály
Existují dva druhy číselných literálů: celé číslo (§2.3.5.1.1) a skutečné (§ 2.3.5.1.2). Oba mohou mít přípony násobitele (§2.3.5.1.3).
2.3.5.1.1 Celočíselné literály
Syntax:
integer-literal:
decimal-integer-literal
hexadecimal-integer-literal
decimal-integer-literal:
decimal-digits numeric-type-suffix~opt~ numeric-multiplier~opt~
decimal-digits:
decimal-digit
decimal-digit decimal-digits
decimal-digit: one of
0 1 2 3 4 5 6 7 8 9
numeric-type-suffix:
long-type-suffix
decimal-type-suffix
hexadecimal-integer-literal:
0x hexadecimal-digits long-type-suffix~opt~
numeric-multiplier~opt~
hexadecimal-digits:
hexadecimal-digit
hexadecimal-digit decimal-digits
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9 a b c d e f
long-type-suffix:
l
numeric-multiplier: one of
kb mb gb tb pb
Popis:
Typ celočíselného literálu je určen jeho hodnotou, přítomností nebo absencí přípony dlouhého typua přítomností číselného násobitele (§2.3.5.1.3).
Pro celočíselné literály, které nemají příponu typu dlouhé
- Je-li jeho hodnota reprezentována typem int (§4.2.3), je to jeho typ;
- Jinak, pokud jeho hodnota může být reprezentována typem long (§4.2.3), to je jeho typ.
- V opačném případě, pokud jeho hodnota může být reprezentována typem desetinné číslo (§2.3.5.1.2), je to jeho typ.
- V opačném případě je reprezentován typem double (§2.3.5.1.2).
Literálová celočíselná hodnota s dlouhou příponou typu
- Je-li jeho hodnota reprezentována typem long (§4.2.3), je to jeho typ;
- Jinak je tento literál špatně sestavený.
Ve dvojkovém doplňkovém kódu celočíselných hodnot je o jednu zápornou hodnotu více než kladných. Pro typ int je tato extra hodnota -2147483648. U dlouhého typu je tato extra hodnota -9223372036854775808. I když by se token 2147483648 obvykle považoval za literál typu long, pokud mu bezprostředně předchází unární operátor minus, tento operátor a literál se považují za literál typu int s nejmenší hodnotou. Podobně, i když by token 9223372036854775808 byl obvykle považován za literál typu decimal, pokud je bezprostředně předcházen unárním operátorem -, pak tento operátor a literál jsou považovány za literál typu long s nejmenší hodnotou.
Některé příklady celočíslovných literálů jsou 123 (int), 123L (long) a 20000000000 (long).
Neexistuje žádná taková věc, jako je celočíselná literál typu bajt.
2.3.5.1.2 Reálné literály
Syntax:
real-literal:
decimal-digits . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
. decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
decimal-digits exponent-part decimal-type-suffix~opt~ numeric-multiplier~opt~
exponent-part:
e sign~opt~ decimal-digits
sign: one of
+
dash
decimal-type-suffix:
d
l
numeric-multiplier: one of
kb mb gb tb pb
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Popis:
Skutečný literál může obsahovat číselný multiplikátor (§2.3.5.1.3).
Existují dva druhy reálného literálu: dvojitý a desetinný. Jsou označeny nepřítomností nebo přítomností přípony typu desetinného čísla. (Neexistuje žádná taková věc, jako je plovoucí bodový literál.)
Dvojitý skutečný literál má typ double (§4.2.4.1). Desetinný reálný literál má typ decimal (§4.2.4.2). Koncové nuly v části zlomku desetinného reálného literálu jsou významné.
Pokud je hodnota exponent-partdesetinné číslice v dvojitém skutečném literálu menší než minimální podporovaná hodnota, hodnota tohoto dvojitého reálného literálu je 0. Pokud je hodnota části exponentus desetinnými číslicemi v desítkovém reálném literálu menší než minimálně podporovaná hodnota, je tento literál špatně vytvořený. Pokud je hodnota exponent-part's desetinné číslice v dvojitém nebo desítkovém skutečném literálu větší než maximální podporovaná hodnota, je tento literál nemocný.
Některé příklady dvojitých skutečných literálů jsou 1., 1.23, .45e35, 32.e+12 a 123.456E-231.
Některé příklady desetinných skutečných literálů jsou 1d (které mají měřítko 0), 1,20d (které má měřítko 2), 1,23450e1d (tj. 12,3450, které má měřítko 4), 1,2345e3d (tj. 1234.5, který má měřítko 1), 1,2345e-1d (tj. 0,12345, který má měřítko 5) a 1,2345e-3d (tj. 0,0012345, který má měřítko 7).
Poznámka
Vzhledem k tomu, že dvojitý skutečný literál nemusí mít zlomek ani exponentní část, seskupování závorek (123). M jsou potřeba k zajištění, že vlastnost nebo metoda M je vybrána pro celočíselné objekt, jehož hodnota je 123. Bez těchto závorek by skutečný literál byl nemocný.
Poznámka
Přestože PowerShell neposkytuje literály pro nekonečno a NaNs, ekvivalenty ve stylu dvojitého reálného literálu lze získat ze statických vlastností pouze pro čtení PositiveInfinity, NegativeInfinity a NaN u typů float a double (§4.2.4.1).
Gramatika umožňuje, že dvojitý reálný literál může mít příponu typu l nebo L. Takový token je skutečně celočíselný literál, jehož hodnota je reprezentována typem long.
Poznámka
Tato funkce byla zachována kvůli zpětné kompatibilitě se staršími verzemi PowerShellu. Programátorům se ale nedoporučuje používat celočíselné literály tohoto tvaru, protože mohou snadno zakrýt skutečnou hodnotu literálu. Například 1,2L má hodnotu 1, 1,2345e1L má hodnotu 12 a 1,2345e-5L má hodnotu 0, z nichž žádný není okamžitě zřejmé.
2.3.5.1.3 Přípony pro násobitele
Syntax:
numeric-multiplier: *one of*
kb mb gb tb pb
Popis:
Pro usnadnění mohou celočíselné a reálné literály obsahovat numerické násobitele, což označuje jednu ze sady běžně používaných mocnin 10. numerické násobení lze zapsat v libovolné kombinaci velkých nebo malých písmen.
| násobitele | Význam | Příklad |
|---|---|---|
| kb | kilobajt (1024) | 1kb ≡ 1024 |
| mb | megabajt (1024 x 1024) | 1.30Dmb ≡ 1363148.80 |
| GB | gigabajt (1024 x 1024 x 1024) | 0x10Gb ≡ 17179869184 |
| tb | terabajt (1024 x 1024 x 1024 x 1024) | 1.4e23tb ≡ 1,5393162788864E+35 |
| Pb | petabajt (1024 x 1024 x 1024 x 1024 x 1024) | 0x12Lpb ≡ 20266198323167232 |
2.3.5.2 Řetězcové literály
Syntax:
string-literal:
expandable-string-literal
expandable-here-string-literal
verbatim-string-literal
verbatim-here-string-literal
expandable-string-literal:
double-quote-character expandable-string-characters~opt~ dollars~opt~ double-quote-character
double-quote-character:
" (U+0022)
Left double quotation mark (U+201C)
Right double quotation mark (U+201D)
Double low-9 quotation mark (U+201E)
expandable-string-characters:
expandable-string-part
expandable-string-characters
expandable-string-part
expandable-string-part:
Any Unicode character except
$
double-quote-character
` (The backtick character U+0060)
braced-variable
$ Any Unicode character except
(
{
double-quote-character
` (The backtick character U+0060)*
$ escaped-character
escaped-character
double-quote-character double-quote-character
dollars:
$
dollars $
expandable-here-string-literal:
@ double-quote-character whitespace~opt~ new-line-character
expandable-here-string-characters~opt~ new-line-character double-quote-character @
expandable-here-string-characters:
expandable-here-string-part
expandable-here-string-characters expandable-here-string-part
expandable-here-string-part:
Any Unicode character except
$
new-line-character
braced-variable
$ Any Unicode character except
(
new-line-character
$ new-line-character Any Unicode character except double-quote-char
$ new-line-character double-quote-char Any Unicode character except @
new-line-character Any Unicode character except double-quote-char
new-line-character double-quote-char Any Unicode character except @
expandable-string-with-subexpr-start:
double-quote-character expandable-string-chars~opt~ $(
expandable-string-with-subexpr-end:
double-quote-char
expandable-here-string-with-subexpr-start:
@ double-quote-character whitespace~opt~ new-line-character expandable-here-string-chars~opt~ $(
expandable-here-string-with-subexpr-end:
new-line-character double-quote-character @
verbatim-string-literal:
single-quote-character verbatim-string-characters~opt~ single-quote-char
single-quote-character:
' (U+0027)
Left single quotation mark (U+2018)
Right single quotation mark (U+2019)
Single low-9 quotation mark (U+201A)
Single high-reversed-9 quotation mark (U+201B)
verbatim-string-characters:
verbatim-string-part
verbatim-string-characters verbatim-string-part
verbatim-string-part:
*Any Unicode character except* single-quote-character
single-quote-character single-quote-character
verbatim-here-string-literal:
@ single-quote-character whitespace~opt~ new-line-character
verbatim-here-string-characters~opt~ new-line-character
single-quote-character *@*
verbatim-*here-string-characters:
verbatim-here-string-part
verbatim-here-string-characters verbatim-here-string-part
verbatim-here-string-part:
Any Unicode character except* new-line-character
new-line-character Any Unicode character except single-quote-character
new-line-character single-quote-character Any Unicode character except @
Popis:
Existují čtyři druhy řetězcových literálů:
doslovný řetězcový literál (jednořádkové jednoduché uvozovky), což je posloupnost nula nebo více znaků ohraničených dvojicí jednoduchých uvozoveks. Příklady jsou '' a 'červená'.
expandable-string-literal (single-line double-quoted), což je posloupnost obsahující nula nebo více znaků ohraničená dvojicí dvojitých uvozovek. Příklady jsou "" a "červená".
doslovný textový řetězec (víceřádkový příkaz s jednoduchými uvozovkami), což je posloupnost nula nebo více znaků ohraničených dvojicemi znaků @znak jednoduché uvozovky a znak jednoduché uvozovky@, všechny obsažené na dvou nebo více zdrojových řádcích. Příklady:
@' '@ @' line 1 '@ @' line 1 line 2 '@expandable-here-string-literal (víceřádkové s dvojitými uvozovkami), což je posloupnost nula nebo více znaků oddělených dvojicí znaků @dvojitým uvozovkovým znakem a dvojitým uvozovkovým znakem@, všechny obsažené na dvou nebo více zdrojových řádcích. Příklady:
@" "@ @" line 1 "@ @" line 1 line 2 "@
Pro doslovné literálya rozbalitelné literályplatí, že kromě bílých znaků (které se ignorují) nesmí žádné znaky následovat na stejném zdrojovém řádku jako otevírací dvojice znaků oddělovače, a nesmí předcházet na stejném zdrojovém řádku jako uzavírací dvojice znaků oddělovače.
Text doslovné doslovné řetězcového literálu nebo rozbalitelného textového liter álu začíná na začátku prvního zdrojového řádku za levým oddělovačem a končí na konci posledního zdrojového řádku před ukončovacím oddělovačem. Tělo může být prázdné. Ukončovací znak řádku posledního zdrojového řádku, který předchází koncovému oddělovači, není součástí textu literálu.
Literál některého z těchto druhů má typ řetězec (§4.3.1).
Znak použitý k oddělení doslovného řetězcového literálu nebo rozšiřitelného řetězcového literálu může být obsažen v tomto řetězcovém literálu tak, že tento znak je zapsán dvakrát po sobě. Například 'What''s the time?' a "I said, ""Hello"".".
jednoznakový znak však nemá žádný zvláštní význam uvnitř rozbalitelného řetězcového literálua dvouznakový znak nemá žádný zvláštní význam uvnitř doslovného literálu s doslovným řetězcem.
rozšiřitelného řetězcového literálu a rozbalitelného řetězcového literálu může obsahovat escapovaný znaks (§2.3.7). Pokud je například do kanálu zapsán následující řetězcový literál, výsledek je následující:
"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!
Pokud expandable-string-literal nebo expandable-here-string-literal obsahuje název proměnné, pokud tento název není bezprostředně před řídicím znakem, nahradí se řetězcovou reprezentací hodnoty této proměnné (§6.7). To se označuje jako nahrazení proměnné.
Poznámka
Pokud je název proměnné součástí nějakého většího výrazu, nahradí se pouze název proměnné. Pokud je například $a pole obsahující prvky 100 a 200, ">$a.Length<" dává >100 200.Length<, zatímco ">$($a.Length)<" dává >2<. Viz rozšíření podvýrazu níže.
Například zdrojový kód
$count = 10
"The value of `$count is $count"
výsledkem je expandable-string-literal
The value of $count is 10.
Vezměte v úvahu následující skutečnosti:
$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally
Výsledek je
$a[0] is red blue[0], $a[0] is red
expandable-string-literals a expandable-here-string-literals také podporují druh nahrazení nazývaného rozšíření dílčího výrazu, tím, že s textem formuláře $( ... ) zachází jako s dílčím výrazem (§7.1.6). Takový text je nahrazen řetězcovou reprezentací hodnoty tohoto výrazu (§6.8). Jakékoli prázdné znaky používané k oddělení tokenů v rámci
Příklady:
$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"
výsledkem je následující expandable-string-literals:
10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)
Následující zdroj:
$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"
výsledkem je následující expandable-string-literal:
$i, $j, and $k have the values 5 10 15
Tyto čtyři řádky by mohly být stručněji napsány takto:
"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"
V následujícím příkladu:
"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"
výsledná rozšiřitelná textová konstanta je následující:
First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
Jak je znázorněno, dílčí výraz může obsahovat řetězcové literály s nahrazením proměnných i rozšířením dílčího výrazu. Všimněte si také, že vnitřní oddělovače expandable-string-literalnemusí být escapovány; skutečnost, že jsou uvnitř dílčího výrazu, znamená, že nemohou být ukončovacími znaky pro vnější expandable-string-literal.
expandable-string-literal nebo expandable-here-string-literal obsahující proměnnou nahrazení nebo rozšíření dílčího výrazu se vyhodnotí při každém použití literálu; například
$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"
výsledkem je následující expandable-string-literals:
$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<
Obsah literálu doslovného řetězce je přebírán doslovně, včetně všech počátečních nebo koncových prázdných znaků v textu. Proto vložené jednoznakový znaknemusí být zdvojnásobené a neexistuje žádná náhrada ani rozšíření. Například
$lit = @'
That's it!
2 * 3 = $(2*3)
'@
což vede k doslovnému výsledku
That's it!
2 * 3 = $(2*3)
Obsah rozbalitelného řetězcového literálu se řídí nahrazením a rozšířením, ale jakékoli počáteční nebo koncové prázdné znaky v těle, ale mimo jakékoli dílčí výrazys se přebírají doslovně a vložené dvojité uvozovkynemusí být dvojitě zdvojené. Například
$lit = @"
That's it!
2 * 3 = $(2*3)
"@
výsledkem je následující text, když je rozbalen:
That's it!
2 * 3 = 6
Pro doslovné doslovné literály here-string-literals a expandable-here-string-literals, každý ukončovací znak řádku v těle je reprezentován výsledným literálem definovaným implementací. Například v
$lit = @"
abc
xyz
"@
Druhý řádek těla má dvě úvodní mezery a první i druhý řádek těla mají ukončovací znaky; nicméně, ukončovací znak druhého řádku těla je , nikoliv jako součást tohoto těla. Výsledný literál je ekvivalentní: "abc<implementation-defined character sequence>xyz".
Poznámka
Kvůli lepší čitelnosti zdroje je možné dlouhé řetězcové literály rozdělit napříč více zdrojovými řádky, aniž by se vkládaly ukončovací čáry řádků. To se provádí zápisem každé části jako samostatného literálu a zřetězení částí pomocí operátoru + (§7.7.2). Tento operátor umožňuje svým operandům určit libovolný ze čtyř typů řetězcového literálu.
Poznámka
I když neexistuje taková věc jako literál znaku jako takový, stejný účinek lze dosáhnout přístupem k prvnímu znaku v řetězci s 1 znakem, například: [char]"A" nebo "A"[0].
Pro doslovné řetězcea rozbalitelné řetězceje každý ukončovač řádku v těle reprezentován přesně tak, jak byl zadán.
2.3.5.3 Literál null
Viz automatická proměnná $null (§2.3.2.2).
2.3.5.4 Booleovské literály
Viz automatické proměnné $false a $true (§ 2.3.2.2).
2.3.5.5 Maticové literály
PowerShell umožňuje zápis výrazů typu matice (§9) pomocí unárního čárkového operátoru (§7.2.1), maticový výraz (§7.1.7), binární operátor čárky (§7.3) a operátor rozsahu (§7.4).
2.3.5.6 Hašové literály
PowerShell umožňuje zápis výrazů typu Hashtable (§10) pomocí hash-literal-expression (§7.1.9)
2.3.5.7 Typy názvů
Syntax:
type-name:
type-identifier
type-name . type-identifier
type-identifier:
type-characters
type-characters:
type-character
type-characters type-character
type-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
_ (The underscore character U+005F)
array-type-name:
type-name [
generic-type-name:
type-name [
2.3.6 Operátory a interpunkční znaky
Syntax:
operator-or-punctuator: one of
{ } [ ] ( ) @( @{ $( ;
&& || & | , ++ .. :: .
! * / % + - --
-and -band -bnot -bor
-bxor -not -or -xor
assignment-operator
merging-redirection-operator
file-redirection-operator
comparison-operator
format-operator
assignment-operator: one of
= -= += *= /= %=
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
comparison-operator: *one of
-as -ccontains -ceq
-cge -cgt -cle
-clike -clt -cmatch
-cne -cnotcontains -cnotlike
-cnotmatch -contains -creplace
-csplit -eq -ge
-gt -icontains -ieq
-ige -igt -ile
-ilike -ilt -imatch
-in -ine -inotcontains
-inotlike -inotmatch -ireplace
-is -isnot -isplit
-join -le -like
-lt -match -ne
-notcontains -notin -notlike
-notmatch -replace -shl*
-shr -split
format-operator:
-f
Popis:
&& a || jsou vyhrazeny pro budoucí použití.
Poznámka
Poznámka editoru: Operátory řetězu kanálů && a || byly zavedeny v PowerShellu 7. Viz about_Pipeline_Chain_Operators.
Název za pomlčkou v operátoru je vyhrazen pouze pro tento účel v kontextu operátoru.
Operátor začínající pomlčkou nesmí mít žádné prázdné znaky mezi tou pomlčkou a tokenem, který následuje.
2.3.7 Escapované znaky
Syntax:
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Popis:
řídicí znak je způsob, jak přiřadit speciální interpretaci znaku tím, že mu poskytnete předponu zpětného znaku (U+0060). Následující tabulka uvádí význam každého escapovaného znaku:
| Escapovaný znak | Význam |
|---|---|
`a |
Upozornění (U+0007) |
`b |
Backspace (U+0008) |
`f |
Podávání formulářů (U+000C) |
`n |
Nový řádek (U+000A) |
`r |
Průvod návratu (U+000D) |
`t |
Horizontální tabulátor (U+0009) |
`v |
Vertikální tabulátor (U+0009) |
`' |
Jednoduchá uvozovka (U+0027) |
`" |
Dvojitá uvozovka (U+0022) |
`` |
Backtick (U+0060) |
`0 |
NUL (U+0000) |
`x |
Pokud x je jiný znak než tyto znaky uvedené výše, znak zpětného znaména se ignoruje a x se bere doslova. |
Důsledkem poslední položky v tabulce výše je, že mezery, které by jinak oddělovaly tokeny, mohou být místo toho součástí tokenu. Například název souboru obsahující mezeru lze zapsat jako Test` Data.txt (a také 'Test Data.txt' nebo "Test Data.txt").