5. Változók

A változók egy érték tárolási helyét jelölik, és ennek az értéknek van típusa. A hagyományos procedurális programozási nyelvek statikusan típusosak; Ez azt jelenti, hogy a változó futásidejű típusa az, amellyel a változót a fordításkor deklarálták. Az objektumorientált nyelvek az öröklést is lehetővé teszik, ami lehetővé teszi, hogy a változó futásidejű típusa az legyen, amellyel a fordításkor deklarálták, vagy valamilyen, az adott típusból származtatott típus. Mivel a nyelv dinamikusan típusos, a PowerShell változóinak nincs típusa. A változók valójában nincsenek definiálva; egyszerűen akkor jönnek majd a világba, amikor először kapják meg az értéket. És bár egy változó egy adott típusú érték (a 5.3)-ra korlátozható, a hozzárendelések típusinformációi nem mindig ellenőrizhetők statikusan.

Különböző időpontokban a változók különböző típusú értékekhez társíthatóak hozzárendeléssel (*7.11) ++ vagy az és ‑‑ operátorok használatával (").7.1.5, .7.2.6). A változóhoz társított érték módosításakor az érték típusa is megváltozhat. Példa:

$i = "abc"        # $i holds a value of type string
$i = 2147483647   # $i holds a value of type int
++$i              # $i now holds a value of type double because
                  # 2147483648 is too big to fit in type int

Ha egy változó nem lett létrehozva, az a következő értéket $null. A Test-Path parancsmag használatával ellenőrizze, hogy van-e definiálva változó.

5.1 Írható hely

Az írható hely olyan kifejezés, amely kijelöl egy olyan erőforrást, amelyhez a parancs olvasási és írási hozzáféréssel is rendelkezik. Az írható hely lehet egy változó (").5), egy tömbelem (").9), egy hashtable társított értéke, amely egy indexen keresztül érhető el (").10), tulajdonság (").7.1.2) vagy egy szolgáltató által felügyelt tároló (").3.1).

5.2 Változókategóriák

A PowerShell a következő változókategóriákat határozza meg: statikus változók, példányváltozók, tömbelemek, kivonattáblás kulcs/érték párok, paraméterek, normál változók és változók a szolgáltatói meghajtókon. A következő alszakaszok az egyes kategóriákat ismertetik.

A következő példában

function F ($p1, $p2) {
    $radius = 2.45
    $circumference = 2 * ([Math]::PI) * $radius

    $date = Get-Date -Date "2010-2-1 10:12:14 pm"
    $month = $date.Month

    $values = 10, 55, 93, 102
    $value = $values[2]

    $h1 = @{ FirstName = "James"; LastName = "Anderson" }
    $h1.FirstName = "Smith"

    $Alias:A = "Help"
    $Env:MyPath = "e:\Temp"
    ${E:output.txt} = 123
    $function:F = { "Hello there" }
    $Variable:v = 10
}
  • [Math::PI] A egy statikus változó
  • $date.Month egy példányváltozó
  • $values[2] egy tömbelem
  • $h1.FirstName A egy kulcs Hashtable , amelynek megfelelő értéke $h 1['FirstName']'
  • $p1 A és $p2 a paraméterek
  • $radiusA , $circumference, $date, $values``$month, $value, és normál $h1 változók
  • $Alias:AA , $Env:MyPath, ${E:output.txt}és $function:F változók a megfelelő szolgáltatói meghajtókon.
  • $Variable:v A valójában egy átlagos változó, amely a teljes szolgáltatói meghajtójával van megírva.

5.2.1 Statikus változók

Az objektumnak az adott típus helyett az objektum típusához tartozó adattagját statikus változónak nevezzük. Néhány példát a következő esetekben talál: 4.2.3, .4.2.4.1 és .4.3.8 .

A PowerShell nem biztosít lehetőséget statikus változókat tartalmazó új típusok létrehozására; az ilyen típusú objektumokat azonban a gazdakörnyezet biztosíthatja.

A statikus változókat tartalmazó objektumok létrehozására és törlésére vonatkozó memóriát a gazdakörnyezet és a szemétgyűjtési rendszer kezeli.

A statikus változók elérésével kapcsolatos információkért lásd a :7.1.2-es adatokat.

A statikus adattag lehet mező vagy tulajdonság.

5.2.2 Példányváltozók

Az objektumnak az objektum típusának egy adott példányához tartozó adattagját nem magára a típusra, hanem példányváltozónak nevezzük. See §4.3.1, §4.3.2, and §4.3.3 for some examples.

A PowerShell-gazdakörnyezetek segítségével példányváltozókat tartalmazó új típusokat hozhat létre, vagy új példányváltozókat adhat hozzá a meglévő típusokhoz.

A statikus változókat tartalmazó objektumok létrehozására és törlésére vonatkozó memóriát a gazdakörnyezet és a szemétgyűjtési rendszer kezeli.

A példányváltozók elérésével kapcsolatos információkért lásd :7.1.2.

A példányadatok egy tagja lehet mező vagy tulajdonság.

5.2.3 Tömbelemek

An array can be created via a unary comma operator (§7.2.1), sub-expression (§7.1.6), array-expression (§7.1.7), binary comma operator (§7.3), range operator (§7.4), or New-Object cmdlet.

A tömbök létrehozására és törlésére vonatkozó memóriát a gazdakörnyezet és a szemétgyűjtési rendszer kezeli.

A tömbökről és tömbelemekről a következőben lesz szó: .9.

5.2.4 Kivonattábla kulcs/érték párok

A kivonattáblák kivonat-literál (*2.3.5.6) vagy a New-Object parancsmag segítségével vannak létrehozva. Új kulcs/érték pár [] az operátorral (#7.1.4.3) is hozzáadható.

A kivonattáblák létrehozásához és törléséhez a memóriát a gazdakörnyezet és a szemétgyűjtési rendszer kezeli.

A kivonattáblákról a következőben lesz szó: .10.

5.2.5-ös paraméterek

A szülőparancs meghívásakor létrejön egy paraméter, amelyet a meghíváskor vagy a gazdakörnyezetben megadott argumentummal inicializál. Egy paraméter megszűnik létezni, amikor a szülőparancsa leáll.

A paramétereket a következő cikk tárgyalja: .8.10.

5.2.6 Normál változók

A normál változókat egy hozzárendelés-kifejezés (").7.11) vagy egy foreach-utasítás (").8.4.4) definiálja. Néhány normál változót a gazdakörnyezet előre meghatároz, míg mások átmenetiek, futásidőben szükség szerint jönnek létre és fognak.

A normál változók élettartama a program végrehajtásának egy része, amely alatt a tároló garantáltan fenntartva lesz számára. Ez az élettartam annak a hatókörnek a bejegyzésekor kezdődik, amelyhez társítva van, és nem végződik hamarabb, mint a hatókör végrehajtásának vége. Ha rekurzívan vagy iteratívan adta meg a szülőhatókört, a rendszer minden alkalommal létrehoz egy új helyi változópéldányt.

A normál változók által hivatkozott tárolót a rendszer a változó élettartamának megfelelően visszaigényli.

A normál változók explicit módon elnevezhetőek változó : névtér-előtaggal (").5.2.7).

5.2.7 Változók a szolgáltatói meghajtókon

A szolgáltatók és a meghajtók fogalmát a 3.1-es részen vezetjük be, és mindegyik szolgáltató képes saját névtérmeghajtó(k)t biztosítani. Ez lehetővé teszi, hogy az ezen meghajtókon az erőforrások úgy érhetők el, mintha normál változók voltak (").5.2.6). Valójában egy normál változót tárolunk a fájlrendszer szolgáltatójának Változó: (*3.1.5) meghajtójában, és a szokásos nevük vagy a teljes névtérnév alapján érhetők el.

Bizonyos névtérváltozó-típusok implicit módon vannak korlátozva (").5.3).

5.3 Korlátozott változók

Alapértelmezés szerint a változók bármilyen típusú értéket kijelölhetnek. Egy változó azonban úgy korlátozható egy adott típus értékeinek megadására, hogy típus-literálként van megadva a neve előtt egy hozzárendelésben vagy paraméterben. Példa:

[int]$i = 10   # constrains $i to designating ints only
$i = "Hello"   # error, no conversion to int
$i = "0x10"    # ok, conversion to int
$i = $true     # ok, conversion to int

function F ([int]$p1, [switch]$p2, [regex]$p3) { ... }

Az Env:, Alias:, vagy a fájlrendszer névteréhez (például 2.3.2, .3.1) tartozó változók implicit módon a típusra korlátozva van string. A névtér-függvényhez tartozó változók ( (;2.3.2, .3.1) implicit módon a típusra korlátozva van scriptblock.