2. Lexikális struktúra
2.1 Nyelvtanok
Ez a specifikáció a PowerShell nyelv szintaxisát mutatja be két nyelvtan használatával. A lexikális nyelvtan (©B.1) azt mutatja be, hogyan kombinálhatók a Unicode-karakterek sorválasztók, megjegyzések, térközök és jogkivonatok formában. A szintaktikai nyelvtan (©B.2) azt mutatja be, hogy a lexikális nyelvtanból származó jogkivonatok egyesítve alkotnak PowerShell-szkripteket.
Az egyszerűség kedvéért ezeknek a nyelvtannak a töredékei a specifikáció során a megfelelő helyeken vannak replikálva.
Az "a" és "z" karakterek a nyelvtanban való használata nem érzékeny. Ez azt jelenti, hogy a rendszer figyelmen kívül hagyja a kis- és nagybetűket a változókban, aliasokban, függvénynevekben, kulcsszavakban, utasításokban és operátorokban. A specifikáció során azonban az ilyen nevek kisbetűvel vannak megírva, néhány automatikus és preferenciaváltozó kivételével.
2.2 Lexikális elemzés
2.2.1-szkriptek
Szintaxis:
Tipp
A ~opt~
szintaxisdefiníciókban a jelzés azt jelzi, hogy a lexikális entitás nem kötelező a szintaxisban.
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
Leírás:
A PowerShell-fordító bemeneti forrásstreamje egy Unicode-karakterek sorozatát tartalmazó szkript bemenete. A stream lexikális feldolgozása magában foglalja a karakterek tokenek sorozatává való csökkentését, amelyek a szintaktikai elemzés bemeneteivé válnak.
A szkriptek a szkriptfájlban tárolt PowerShell-parancsok csoportjai. Maga a szkript önmagában nem rendelkezik névvel, és a nevét a forrásfájlból veszi fel. A fájl vége a szkript végét jelzi.
A szkriptek tartalmazhatnak digitális aláírást is. A gazdakörnyezet nem szükséges az aláírást követő vagy az aláíráshoz hasonló szövegek feldolgozásához. A digitális aláírások létrehozását és használatát ez a specifikáció nem fedi le.
2.2.2 Sorválasztók
Szintaxis:
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
Leírás:
Az új sor-karakterek jelenléte a bemeneti forrásstreamben olyan sorokra osztja azt, amelyek például hibajelentésre és egysoros megjegyzés végének észlelésére használhatók.
A sorválasztók térközként (azaz 2.2.4) kezelhetők.
2.2.3 Megjegyzések
Szintaxis:
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 #
Leírás:
A forráskód megjegyzésekkel is használható.
Az egysoros megjegyzés a karakterrel kezdődik #
, és egy új-sor-karakterrel végződik.
A tagolt-megjegyzés a <#
karakterpárral kezdődik, és a karakterpárra végződik #>
.
Ez történhet egy forrássor részeként, vagy egy teljes forrássor részeként, vagy akár több forrássorra is.
A megjegyzéseket a szóközként kezeli.
A fenti éles környezetek azt jelentik, hogy
- Megjegyzések nem ágyazhatók egymásba.
- Az <# és #> karaktersorozatnak nincs különleges jelentése egysoros megjegyzésben.
- A # karakternek nincs különleges jelentése a tagolt megjegyzésekben.
A lexikális nyelvtan azt jelenti, hogy a megjegyzések nem történhetnek jogkivonatok között.
(A speciális értékű megjegyzéseket tartalmazó parancsfájlok létrehozásáról a dokumentáció parancsfájlfájlokból való létrehozásához használt részletes információkért lásd : .A.)
A "requires-comment" megszabadítja azokat a feltételeket, amelyek teljesülniük kell ahhoz, hogy a parancsfájl futása engedélyezett legyen. Az elsődleges feltétel a szkript futtatásához használt PowerShell-verzió. A minimális verziókövetelmény a következőképpen van megadva:
#requires -Version N[.n]
Ahol N a (szükséges) főverzió, az n pedig a (nem kötelező) alverzió.
A megjegyzések bármilyen szkriptfájlban jelen lehet; függvényben vagy parancsmagban azonban nem lehet jelen. A forrássor első elemének kell lennie. Egy szkript több, beavatkozást igénylő megjegyzést is tartalmazhat.
A karaktersorozat csak akkor ismerhető fel megjegyzésként, ha a sorozat a vagy a karaktersorozatmal kezdődik #
<#
. A hello#-t például egyetlen tokennek tekintjük, míg a hello #there token hello, amelyet egy egysoros megjegyzés követ. A megjegyzés kezdőütemezése a szóköz után bármilyen kifejezés-lezáró vagy utasítás-lezáró karakterrel is megelőzheti ()
például , , }
, ]``'
, "
vagy ;
).
A beépülő modulban nem lehet megjegyzés szükséges.
A megjegyzéseknek négy másik formája is létezik:
#requires --Assembly AssemblyId
#requires --Module ModuleName
#requires --PsSnapIn PsSnapIn [ -Version *N* [.n] ]
#requires --ShellId ShellId
2.2.4 Térköz
Szintaxis:
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
Leírás:
A térköz egy vagy több szóköz karakterből álló sorozatból áll.
A rendszer figyelmen kívül hagyja azt a tényt, hogy a szóköz elválasztóként is funkálhat a jogkivonatok számára.
Néhány népszerű nyelvtől eltérően a PowerShell nem veszi üres szóköznek a sorválasztó karaktereket (a 2.2.2-es). A sorválasztók azonban úgy is kezelhetők térközként, ha közvetlenül egy (U+0060) visszatűnés `
karakterrel előtűdnek. Erre akkor van szükség, ha egy sor tartalma szintaktikailag teljes, de a következő sor az előző sorhoz társítható jogkivonatokat tartalmaz. Példa:
$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
Ebben a példában a backtick azt jelzi, hogy a forrásvonal folytatódik. A következő kifejezés egyenértékű a következővel $number = 10 + 20 - 50
: .
$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20
2.3 Jogkivonatok
Szintaxis:
token:
keyword
variable
command
command-parameter
command-argument-token
integer-literal
real-literal
string-literal
type-literal
operator-or-punctuator
Leírás:
A token a PowerShell nyelv legkisebb lexikális eleme.
A jogkivonatok új sorokkal , megjegyzésekkel, térközekkel vagy ezek bármilyen kombinációjával elválaszthatóak.
2.3.1 kulcsszavak
Szintaxis:
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
Leírás:
A kulcsszó olyan karakterek sorozata, amelyek különleges jelentéssel bírnak a környezetfüggő helyen való használata során. Leggyakrabban ez az első jogkivonat egy utasításban; vannak azonban más helyek is, ahogy azt a nyelvtan is jelzi. (A kulcsszóhoz hasonlító, de kulcsszókörnyezetben nem használt jogkivonat egy parancsnév vagy egy parancs-argumentum.)
A , class
, define``from
, using
és var
kulcsszavak későbbi használatra vannak fenntartva.
Megjegyzés
Szerkesztő megjegyzése: A class
és using
a kulcsszavak a PowerShell 5.0-ban voltak bevezetve. Lásd : about_Classes és about_Using.
2.3.2 Változók
Szintaxis:
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
Leírás:
A változókról részletesen az ((5) alatt lesz szó. A $? A (2.3.2.2) A hatókörökről a következőben lesz szó: .3.5.
A és változók $$
$^
egy interaktív környezetben való használatra vannak fenntartva, amely kívül esik ennek a specifikációnak a hatókörében.
Változónevet kétféleképpen lehet megírni: egy kapcsos zárójeles változónév ,$
amely a következővel kezdődik: , amelyet egy vagy több szinte tetszőleges karakterrel elválasztott kapcsos zárójellel tagolt készlet követ; valamint egy normál változónév , amely szintén azzal kezdődik, $
hogy egy vagy több karakterből áll egy vagy több karakter a kapcsos zárójeles változó nevénél. Minden normál változónév egy megfelelő kapcsos zárójeles változónévvel fejezható ki.
$totalCost
$Maximum_Count_26
$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)
${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}
A változók nevének hossza nincs korlátozva, a változónévben szereplő összes karakter jelentős, és a kisbetűk nem különböznek egymástól.
Többféle változó is létezik: felhasználó által definiált (").2.3.2.1), automatikus (ér 2.3.2.2.2) és preferencia (").2.3.2.3). Mindegyik ugyanabban a hatókörben egyidejűleg használhatja őket (").3.5).
Vegye figyelembe a következő függvénydefiníciót és hívásokat:
function Get-Power ([long]$base, [int]$exponent) { ... }
Get-Power 5 3 # $base is 5, $exponent is 3
Get-Power -exponent 3 -base 5 # " " "
Minden argumentumot pozíció vagy név alapján ad át, egyszerre egy-egy argumentumot. Az argumentumok készlete azonban továbbadható csoportként a futásidejű környezet által kezelt egyes argumentumok kibontása mellett. Ezt az automatikus argumentumbővítést splatingnak nevezik. Példa:
$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
Ez az átadott változó első @
$
karaktere helyett a használatával érhető el.
Ez a notation csak egy parancs argumentumában használható.
A nevek különböző névterekbe vannak particionálva, amelyek mindegyikét egy virtuális meghajtó tárolja (").3.1). A változók Variable:
például a -ban vannak tárolva, Env:
a környezeti változók a -ban vannak tárolva, Function:
a függvények a -ban, az aliasok pedig a-ban.Alias:
Ezek a nevek változókként érhetők el a változó-névtér éles környezetben, a változó hatókörében. Példa:
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
A változók nevének Variable:
explicit névtér használatával történő használata egyenértékű ugyanazon változónév ezen minősítés nélküli használatával. Például a és $v
$Variable:v
a felcserélhető.
A változók a nyelvben való definiálás mellett a New-Variable parancsmag használatával is definiálhatóak.
2.3.2.1 Felhasználó által definiált változók
A nyelvtan által engedélyezett, de az automatikus vagy preferenciaváltozók által nem használt bármilyen változónév elérhető a felhasználó által definiált változókhoz.
A felhasználó által definiált változókat a felhasználó által definiált szkriptek határozzák meg és kezelik.
2.3.2.2 Automatikus változók
Az automatikus változók a PowerShell-környezet állapotinformációit tárolják. Az értékük olvasható a felhasználó által írt parancsfájlban, de nem írható.
Megjegyzés
A dokumentumban eredetileg talált táblázat el lett távolítva a duplikáció csökkentése érdekében. Az automatikus változók teljes listájáért lásd: about_Automatic_Variables.
2.3.2.3 Preferenciaváltozók
A preferenciaváltozók a munkamenet felhasználói beállításait tárolják. Ezeket a PowerShell-futásidejű környezet hozta létre és inicializálja. Az értékük felhasználó által írt szkriptben olvasható és írható.
Megjegyzés
A dokumentumban eredetileg talált táblázat el lett távolítva a duplikáció csökkentése érdekében. A beállításváltozók teljes listáját lásd: about_Preference_Variables.
2.3.3 Parancsok
Szintaxis:
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-es paraméterek
Szintaxis:
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
Leírás:
Egy parancs meghívásakor az információk egy vagy több olyan argumentumon keresztül is átküldhetőek, amelyeknek az értékei a parancson belülről érhetők el a megfelelő paraméterek halmazán keresztül. A paraméterek argumentumokkal való egyeztetésének folyamatát paraméterkötésnek nevezzük.
Háromféle argumentum létezik:
Kapcsolóparaméter (("8.10.5) – Ez az űrlap parancs-paramétere , ahol a first-parameter-char és a parameter-chars együtt alkotják a kapcsoló nevét, amely megfelel egy paraméter nevének (
-
a kezdő nélkül) a meghívott parancsban. Ha a záró kettőspont nincs megadva, az argumentum jelenléte azt jelzi, hogy a megfelelő paraméter értéke .$true
Ha a záró kettőspont jelen van, a közvetlenül következő argumentumnak bool típusú értéket kell kijelölnie, és a megfelelő paraméter erre az értékre van beállítva. A következő meghívások például egyenértékűek:Set-MyProcess -Strict Set-MyProcess -Strict: $true
Parameter with argument (§8.10.2) -- This has the form command-parameter where first-parameter-char and parameter-chars together make up the parameter name, which corresponds to the name of a parameter (without its leading -) in the command being invoked. Nem lehet záró kettőspont. A közvetlenül a következő argumentum egy társított értéket jelöl ki. Például egy parancs, amely paramétereket
Get-Power``$base
$exponent
és paraméterekkel rendelkezik, a következő meghívások egyenértékűek:Get-Power -base 5 -exponent 3 Get-Power -exponent 3 -base 5
Pozíció argumentuma (("8.10.2) – Az argumentumok és a hozzájuk tartozó parancsokon belüli paraméterek pozícióval rendelkezik, az első pozíciója nulla. A 0 pozícióban az argumentum a paraméterhez van kötve a 0 pozícióban; az 1. pozíció argumentuma az 1. pozícióban a paraméterhez van kötve; és így tovább. Egy olyan parancs például, amely paraméterekkel
Get-Power``$base
$exponent
rendelkezik, illetve 0 és 1 pozícióban van, a következő meghívja ezt a parancsot:Get-Power 5 3
A és a speciális paraméterekkel kapcsolatos részletekért lásd :--``--%
8.2.
Egy parancs meghívásakor a paraméter neve rövidíthető; A teljes név bármely eltérő kezdő része használható, feltéve, hogy az egyértelmű az ugyanazon parancs által elfogadott többi paraméter neve alapján.
A paraméterkötéssel kapcsolatos információkért lásd : .8.14.
2.3.5 literálok
Szintaxis:
literal:
integer-literal
real-literal
string-literal
2.3.5.1 Numerikus literálok
Kétféle numerikus konstans létezik: egész szám (").2.3.5.1.1) és valós (").2.3.5.1.2). Mindkettőnek lehet többplatonos utótagja (").2.3.5.1.3).
2.3.5.1.1 Egész szám literálok
Szintaxis:
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
Leírás:
Az egész szám típusú literál típusát az értéke, a hosszú-típus-utótag jelenléte vagy hiánya, valamint egy numerikus szorzó jelenléte határozza meg (").2.3.5.1.3).
Hosszú típusú-utótag nélkül egész szám típusú literálhoz
- If its value can be represented by type int (§4.2.3), that is its type;
- Ellenkező esetben, ha az értéke hosszú (#4.2.3) típussal is ábrázolható, akkor az a típusa.
- Ellenkező esetben, ha az értéke decimális (#2.3.5.1.2) típussal is ábrázolható, ez a típusa.
- Ellenkező esetben a kettős típus (ér 2.3.5.1.2) jelöli.
Hosszú-típusú-utótaggal megadott egész szám típusú literálhoz
- If its value can be represented by type long (§4.2.3), that is its type;
- Ellenkező esetben az ilyen konstansok nem alakulnak ki.
Az egész szám értékek két kiegészítésként való ábrázolása egy további negatív értéket tartalmaz, mint a pozitív. Az int típus értéke -2147483648. A hosszú típushoz ez a többletérték -9223372036854775808. Bár a token 2147483648 általában hosszú típusú literálként lenne kezelve, ha közvetlenül az unáris operátor előzi meg, az operátor és a literál a legkisebb értékű int típusú literálként lesz kezelve. Hasonlóképpen, annak ellenére, hogy a 9223372036854775808 token általában decimális típusú valós literálként lenne kezelve, ha közvetlenül az unáris operátor előzi meg, az operátor és a literál hosszú típusú literálként van kezelve, a legkisebb értékkel.
Néhány példa egész szám típusú literálra: 123 (int), 123L (hosszú) és 20000000000 (hosszú).
Nincs olyan, hogy bájt típusú egész szám típusú literál.
2.3.5.1.2 Valós literálok
Szintaxis:
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)
Leírás:
Egy valós literál tartalmazhat numerikus szorzót (").2.3.5.1.3).
Kétféle valós literál létezik: dupla és decimális. Ezeket a tizedes-típus-utótag hiánya vagy jelenléte jelzi. (Nincs olyan, hogy lebegő valós literál.)
A dupla valós literál típusa double (").4.2.4.1). A decimális valós literál típus decimális (azaz 4.2.4.2). A tizedestört valós literál törtrészének záró nullái jelentősek.
Ha a kitevő-rész decimális-számjegyek értéke egy dupla valós literálban kisebb, mint a minimális támogatott érték, akkor a dupla valós literál értéke 0. Ha a kitevő-rész decimális-számjegyei tizedes törtszámban megadott valós literál értéke kisebb, mint a minimális támogatott érték, akkor ez a literál nem megfelelő. Ha a kitevő-rész decimális-számjegyek értéke egy dupla vagy decimális valós literálban nagyobb, mint a maximális támogatott érték, akkor a literál nem megfelelő.
Néhány példa a dupla valós literálra: 1., 1.23, .45e35, 32.e+12 és 123.456E-231.
Néhány példa a decimális valós literálra: 1d (amelynek skálája 0), 1,20d (amelynek skálája 2), 1,23450e1d (vagyis 12,3450, amelynek skálája 4), 1,2345e3d (pl.: 1234,5, amelynek skálája 1), 1,2345e-1d (pl. 0,12345, amelynek skálája 5) és 1.2345e-3d (pl.: 0,0012345, amelynek skálája 7).
Megjegyzés
Mivel a dupla valós literálnak nincs szüksége tört vagy kitevő részre, a csoportosítás zárójelei a (123) értékben. M-re van szükség annak biztosításához, hogy az M tulajdonság vagy metódus legyen kiválasztva azon egész szám objektumhoz, amelynek értéke 123. E zárójelek nélkül a valódi literál nem lenne megfelelő.
Megjegyzés
Bár a PowerShell nem biztosít konstansokat az infinitások és a NaN-ek számára, a dupla valós literál-hez hasonló megfelelők a PositiveInfinity, NegativeInfinity és NaN statikus írási tulajdonságokból nyerhetők ki (float és double (").4.2.4.1).
A nyelvtan lehetővé teszi, hogy a két valós literálból l
L
indulva egy vagy típusú utótag legyen. Az ilyen tokenek valójában egész szám típusú literálok, amelyeknek az értékét hosszú típus képviseli.
Megjegyzés
Ez a funkció a PowerShell korábbi verzióival való visszamenőleges kompatibilitás érdekében megőrzve lett. A programozóknak azonban nem ajánlott az űrlap egész szám típusú konstansát használniuk, mivel könnyen elfedik a konstans tényleges értékét. Például az 1.2L értéke 1, az 1,2345e1L értéke 12, az 1.2345e-5L pedig 0 értéket, amelyek közül egyik sem nyilvánvaló.
2.3.5.1.3 Multiplier utótagok
Szintaxis:
numeric-multiplier: *one of*
kb mb gb tb pb
Leírás:
Az egyszerűség kedvéért az egész számok és a valós literálok tartalmazhatnak egy numerikus szorzót, amely a 10-es gyakran használt képességek egyik halmazát jelzi. A numerikus szorzó kis- és nagybetűk bármilyen kombinációjával írható.
Szorzó | Értelmezés | Példa |
---|---|---|
kb | kilobájt (1024) | 1 kb. ≡ 1024 |
Mb | megabájt (1024 x 1024) | 1,30Dmb ≡ 1363148.80 |
Gb | gigabájt (1024 x 1024 x 1024) | 0x10 Gb ≡ 17179869184 |
Tb | terabájt (1024 x 1024 x 1024 x 1024) | 1.4e23tb ≡ 1.5393162788864E+35 |
Pb | petabájt (1024 x 1024 x 1024 x 1024 x 1024 x 1024) | 0x12Lpb ≡ 20266198323167232 |
2.3.5.2 Sztring-literálok
Szintaxis:
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 @
Leírás:
A sztringek literálja négyféle lehet:
verbatim-string-literal (egysoros egy idézőjeles), amely nulla vagy több karakterből áll, és egy idézőjel-karakterpárral van elválasztva. Ilyen például a "" és a "red".
expandable-string-literal (egysoros dupla idézőjeles), amely nulla vagy több karakterből, dupla idézőjelek párral elválasztott sorozata. Ilyen például a "" és a "red".
verbatim-here-string-literal (többsoros egyszeres idézőjeles), amely nulla vagy több karakterből álló sorozat, amelyet az @egy-idézőjel-karakter , illetve az egyszeres idézőjel-karakter@karakter karakter elválaszt, és amelyek mind két vagy több forrássoron találhatóak. Példák:
@' '@ @' line 1 '@ @' line 1 line 2 '@
expandable-here-string-literal (többsoros dupla idézőjeles), amely nulla vagy több karakterből álló sorozat, amelyet a @double-quote-character és a double-quote-character@karakter karakter karakterpárok határolt sorozata, és amelyek mind két vagy több forrássoron találhatóak. Példák:
@" "@ @" line 1 "@ @" line 1 line 2 "@
Verbatim-here-string-literals és expandable-here-string-literals esetén, kivéve a szóközt (amelyet a rendszer figyelmen kívül hagy), nem követhet karaktereket a nyitó elválasztó-karakter párral azonos forrássoron, és egyetlen karakter sem előzheti meg ugyanazt a forrássort, mint a záró elválasztó karakterpár.
A verbatim-here-string-literal vagy egy expandable-here-string-literál törzse a nyitó elválasztó karakter után az első forrássor elején kezdődik, és a záró elválasztó előtt utolsó forrássor végén végződik. Előfordulhat, hogy a törzs üres. A záró elválasztó karakter előtt az utolsó forrásvonalon a sorhatároló nem része az adott literál törzsének.
Az ilyen típusú konstansok típusa sztring (").4.3.1).
A verbatim-string-literal vagy expandable-string-literál elválasztásához használt karakter egy ilyen sztring-literálban is megtalálható, ha egymás után kétszer írja meg ezt a karaktert. Például: 'What''s the time?'
és "I said, ""Hello""."
. Az egyszeres idézőjel-karakternek azonban nincs különleges jelentése egy kibontható-sztring-literálban, és a dupla idézőjel-karakternek nincs különleges jelentése a verbatim-string-literálban.
Egy kibontható-sztring-literál és egy expandable-here-string-literál escape-karaktereket tartalmazhat (").2.3.7). Ha például a következő sztring-literál van beírva a folyamatba, az eredmény az alábbi módon jelenik meg:
"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!
Ha egy expandable-string-literal vagy expandable-here-string-literal tartalmazza egy változó nevét, kivéve, ha ezt a nevet közvetlenül egy escape-karakter előzi meg, akkor a változó értékének sztringre ábrázolása váltja fel (").6.7). Ez az úgynevezett változóbehelyettesítés.
Megjegyzés
Ha a változó neve egy nagyobb kifejezés része, csak a változó neve lesz lecserélve. Ha például egy $a
tömb, amely a 100-as és a 200-as elemet tartalmazza, ">$($a.Length)<"
">$a.Length<"
>100 200.Length<
akkor az eredményt, míg a eredményt ad.>2<
Lásd alább az alkifejezésbővítést.
Például a forráskód
$count = 10
"The value of `$count is $count"
az expandable-string-literal eredményt ad
The value of $count is 10.
A következőket ajánljuk figyelmébe:
$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally
Az eredmény
$a[0] is red blue[0], $a[0] is red
A expandable-string-literals és az expandable-here-string-literálok egy úgynevezett részkifejezés-bővítést is támogatnak, $( ... )
mivel az űrlap szövegét alkifejezésként kezeli (").7.1.6). Az ilyen szöveget a kifejezés értékének sztringre ábrázoló sztringre cseréli (").6.8). A rendszer figyelmen kívül hagyja az alkifejezés utasítási listájában található jogkivonatok elválasztára használt térközt az eredmény sztringje konstrukcióját figyelembe véve.
A példák:
$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"
eredményként a következő expandable-string-literálok adatokat kell eredményezni:
10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)
A következő forrás:
$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"
A a következő expandable-string-literál eredményt ad:
$i, $j, and $k have the values 5 10 15
Ezt a négy sort tömörebbül is megírhatták volna a következőképpen:
"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"
A következő példában:
"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"
az eredményül kapott expandable-string-literal a következő:
First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
Ahogy látható, egy alkifejezés tartalmazhat olyan sztring-literálokat, amelyekben a változók helyettesítése és a kifejezés alkifejezésének bővítése is van. Azt is vegye figyelembe, hogy a belső expandable-string-literál elválasztó karakterét nem kell escape-karakterekkel elválasztni; Az, hogy egy alkifejezésen belül vannak, azt jelenti, hogy nem lehet lezáró a külső kibontható-sztring-literálhoz.
A változók helyettesítését vagy részkifejezés-bővítést tartalmazó expandable-string-literal vagy expandable-here-string-literál minden egyes literál használatakor ki lesz értékelve; például:
$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"
amelynek eredménye a következő expandable-string-literals:
$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<
A verbatim-here-string-literal tartalmát a program szó szerint használja, beleértve a törzsben található kezdő vagy záró szóközt is. Ezért a beágyazott egyszeres idézőjeleket nem kell duplázni, és nincs helyettesítés vagy bővítés. Példa:
$lit = @'
That's it!
2 * 3 = $(2*3)
'@
amely a konstanst
That's it!
2 * 3 = $(2*3)
Egy kibontható-itt-sztring-literál tartalma helyettesítésre és bővítésre van kitéve, de a törzsben található bevezető vagy záró térközök, de az alkifejezéseken kívül is szó szerint vannak, és a beágyazott dupla idézőjel-karaktereket nem kell duplázni. Példa:
$lit = @"
That's it!
2 * 3 = $(2*3)
"@
ez a következő konstanst jelenti kibontva:
That's it!
2 * 3 = 6
A verbatim-here-string-literálok és az expandable-here-string-literálok esetén a törzsben minden sorterminátor implementáció által definiált módon van ábrázolva az eredményül kapott literálban. Például:
$lit = @"
abc
xyz
"@
A törzs második sorában két kezdő szóköz található, a törzs első és második sorában pedig sorválasztók vannak; A törzs második sorának lezárója azonban nem része ennek a törzsnek. Az eredményül kapott literál egyenértékű a következővel: "abc<implementation-defined character sequence>xyz"
.
Megjegyzés
A forrás olvashatóságának javítása érdekében a hosszú sztringek literálja több forrássorra is bontható sortörés nélkül. Ehhez mindegyik részt külön literálként kell megírni, és össze kell őket foglalni a + operátorral (").7.7.2). Ez az operátor lehetővé teszi az operandusok számára, hogy a sztringek négyféle konstansának bármelyikét kijelölhét.
Megjegyzés
Bár nincs olyan, hogy karakter-literál per se, ugyanez a hatás egy 1 karakterből áll sztring első karakterének elérésével érhető el, az alábbiak szerint: [char]"A"
vagy "A"[0]
.
A verbatim-here-string-literálok és az expandable-here-string-literálok esetén a törzsben található minden sorválasztó pontosan a megadott adatokat tartalmazza.
2.3.5.3 Null literál
Lásd az automatikus változót $null
(").2.3.2.2).
2.3.5.4 Logikai literálok
Lásd az automatikus változókat $false
és $true
(").2.3.2.2).
2.3.5.5 Tömb literálok
A PowerShell lehetővé teszi, hogy tömbtípusú kifejezések (").9) írhatóak az unáris vessző operátor (").7.2.1), a tömb-kifejezés (").7.1.7), a bináris vessző operátor (").7.3) és a tartomány operátor (").7.4) használatával.
2.3.5.6 kivonat-literálok
A PowerShell lehetővé teszi kivonattábla (azaz 10) típusú kifejezések írását egy kivonat-literál-kifejezéssel (következő: 7.1.9)
2.3.5.7 Típusnevek
Szintaxis:
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átorok és írásjelek
Szintaxis:
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
Leírás:
&&
A és ||
a későbbi használatra van fenntartva.
Megjegyzés
Szerkesztő megjegyzése: A folyamatlánc operátorai &&
||
és a PowerShell 7-ben voltak bevezetve. Lásd : about_Pipeline_Chain_Operators.
Az operátorban a következő kötőjelet követő név erre a célra csak operátori kontextusban van fenntartva.
A kötőjellel kezdődik operátornak nem lehet szóköz a kötőjel és az azt követő jogkivonat között.
2.3.7 Escape-karakter
Szintaxis:
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Leírás:
Az escape-karakterrel speciális értelmezést rendelhet hozzá egy karakterhez úgy, hogy backtick előtagot (U+0060) ad neki. Az alábbi táblázatban az egyes escape-karakter jelentése látható:
Escape-karakter | Értelmezés |
---|---|
`a |
Riasztás (U+0007) |
`b |
Backspace (U+0008) |
`f |
Űrlapcsatorna (U+000C) |
`n |
Új sor (U+000A) |
`r |
Kocsivissza (U+000D) |
`t |
Vízszintes lap (U+0009) |
`v |
Függőleges lap (U+0009) |
`' |
Egyszeres idézőjel (U+0027) |
`" |
Dupla idézőjel (U+0022) |
`` |
Backtick (U+0060) |
`0 |
NUL (U+0000) |
`x |
Ha x a a fenti karaktereken kívül más karakter, x akkor a rendszer figyelmen kívül hagyja a háttér karakterét, és szó szerint veszi. |
A fenti táblázat utolsó bejegyzésének az a jele, hogy olyan szóközök, amelyek egyébként külön jogkivonatokat választanának, inkább egy jogkivonat részeivé tenék. A szóközt tartalmazó fájlnév például a következő formátumban írható meg: Test` Data.txt
(vagy 'Test Data.txt'
"Test Data.txt"
).
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: