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").