Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Redaktionell anteckning
Viktig
Windows PowerShell Language Specification 3.0 publicerades i december 2012 och baseras på Windows PowerShell 3.0. Den här specifikationen återspeglar inte det aktuella tillståndet för PowerShell. Det finns ingen plan för att uppdatera den här dokumentationen för att återspegla det aktuella tillståndet. Den här dokumentationen presenteras här för historisk referens.
Specifikationsdokumentet är tillgängligt som ett Microsoft Word dokument från Microsoft Download Center på: https://www.microsoft.com/download/details.aspx?id=36389 Det Word dokumentet har konverterats för presentation här på Microsoft Learn. Under konverteringen har vissa redaktionella ändringar gjorts för att anpassa formateringen för Docs-plattformen. Vissa stavfel och mindre fel har korrigerats.
2.1 Grammatik
Den här specifikationen visar syntaxen för PowerShell-språket med hjälp av två grammatiker. lexikal grammatik (§B.1) visar hur Unicode-tecken kombineras för att bilda radavgränsare, kommentarer, blanksteg och tokens. Den syntaktiska grammatiken (§B.2) visar hur tokenen som är resultatet av den lexikala grammatiken kombineras för att bilda PowerShell-skript.
För enkelhetens skull replikeras fragment av dessa grammatiker på lämpliga platser i den här specifikationen.
All användning av tecknena "a" till "z" i grammatiken är skiftlägesokänslig. Det innebär att bokstavsfall i variabler, alias, funktionsnamn, nyckelord, instruktioner och operatorer ignoreras. I den här specifikationen skrivs dock sådana namn i gemener, med undantag för vissa automatiska variabler och inställningsvariabler.
2.2 Lexikal analys
2.2.1 Skript
Syntax:
Tips
Den ~opt~ notationen i syntaxdefinitionerna anger att den lexikala entiteten är valfri i syntaxen.
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
Beskrivning:
Inmatningsströmmen till en PowerShell-översättare är indata i ett skript, som innehåller en sekvens med Unicode-tecken. Den lexikala bearbetningen av den här strömmen innebär att dessa tecken reduceras till en sekvens av token, som fortsätter att bli indata för syntaktisk analys.
Ett skript är en grupp PowerShell-kommandon som lagras i en skriptfil. Själva skriptet har inget namn i sig och tar namnet från källfilen. Slutet av filen anger slutet på skriptet.
Ett skript kan eventuellt innehålla en digital signatur. En värdmiljö krävs inte för att bearbeta text som följer en signatur eller något som ser ut som en signatur. Skapandet och användningen av digitala signaturer omfattas inte av den här specifikationen.
2.2.2 Radavgränsare
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
Beskrivning:
Förekomsten av i indatakällan delar upp den i rader som kan användas för till exempel felrapportering och identifiering av slutet av en kommentar med en rad.
En linjeavgränsare kan behandlas som tomt utrymme (§2.2.4).
2.2.3 Kommentarer
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 #
Beskrivning:
Källkod kan kommenteras med hjälp av kommentarer.
En enradskommentar börjar med tecknet # och slutar med ett nytt radtecken.
En avgränsad kommentar börjar med teckenparet <# och slutar med teckenparet #>.
Det kan förekomma som en del av en källrad, som en hel källrad, eller så kan den sträcka sig över valfritt antal källrader.
En kommentar behandlas som tomt utrymme.
Ovanstående produktioner innebär att
- Kommentarer kapslas inte.
- Teckensekvenserna <# och #> har inte någon särskild betydelse i en enradig kommentar.
- Tecknet # har ingen särskild betydelse i en avgränsad kommentar.
Den lexikala grammatiken innebär att kommentarer inte kan ske inuti token.
(Se §A för information om hur du skapar skriptfiler som innehåller specialvärdeskommentare som används för att generera dokumentation från skriptfiler.)
En med en obligatorisk kommentar anger de kriterier som måste uppfyllas för att det innehållande skriptet ska få köras. Det primära kriteriet är den version av PowerShell som används för att köra skriptet. Minimikravet för version anges på följande sätt:
#Requires -Version N[.n]
Om N är den (obligatoriska) huvudversionen och n är den (valfria) delversionen.
En kräver kommentar kan finnas i valfri skriptfil. Den kan dock inte finnas i en funktion eller cmdlet. Det måste vara det första objektet på en källrad. Ett skript kan innehålla flera requires-comments.
En teckensekvens identifieras bara som en kommentar om sekvensen börjar med # eller <#. Till exempel anses hello#there vara en enstaka token medan hello #there anses vara token hello följt av en enradig kommentar. Förutom efter blanksteg kan kommentarens startsekvens också föregås av ett tecken som avslutar ett uttryck eller en sats (till exempel ), }, ], ', "eller ;).
En med kommentar kan inte finnas i en snap-in-modul.
Det finns fyra andra former av en kräver-kommentar:
#Requires -Assembly AssemblyId
#Requires -Module ModuleName
#Requires -PSSnapin PSSnapin [ -Version *N* [.n] ]
#Requires -ShellId ShellId
2.2.4 Mellanrum
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
Beskrivning:
Blanksteg består av en sekvens med ett eller flera blanksteg tecken.
Förutom att tomt utrymme kan fungera som avgränsare för token ignoreras det.
Till skillnad från vissa populära språk anser PowerShell inte att radbrytningstecken (§2.2.2) är blanksteg. En radavgränsare kan dock behandlas som tomt utrymme genom att omedelbart föregå den med ett backtick-tecken, ` (U+0060). Detta är nödvändigt när innehållet på en rad är fullständigt syntaktiskt, men följande rad innehåller token som är avsedda att associeras med föregående rad. Till exempel
$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
I det här exemplet betecknar backticken att källraden fortsätter. Följande uttryck motsvarar $number = 10 + 20 - 50.
$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20
2.3 Token
Syntax:
token:
keyword
variable
command
command-parameter
command-argument-token
integer-literal
real-literal
string-literal
type-literal
operator-or-punctuator
Beskrivning:
En token är det minsta lexikala elementet i PowerShell-språket.
Token kan avgränsas med nya rader, kommentarer, blanksteg eller valfri kombination av dessa.
2.3.1 Nyckelord
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
Beskrivning:
Ett nyckelord är en sekvens med tecken som har en särskild betydelse när det används på en kontextberoende plats. Oftast är detta som den första token i en -instruktion; det finns dock andra platser, som grammatiken visar. (En token som ser ut som ett nyckelord, men som inte används i en nyckelordskontext, är ett kommandonamn eller ett kommandoargument.)
Nyckelorden class, define, from, usingoch var är reserverade för framtida användning.
Not
Redigerarens anmärkning: Nyckelorden class och using introducerades i PowerShell 5.0. Se om_klasser och om_användning.
2.3.2 Variabler
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
Beskrivning:
Variabler beskrivs i detalj i (§5). Variabeln $? diskuteras i §2.3.2.2. Omfång diskuteras i §3.5.
Variablerna $$ och $^ är reserverade för användning i en interaktiv miljö som ligger utanför den här specifikationens omfång.
Det finns två sätt att skriva ett variabelnamn: Ett klammerparenteserat variabelnamn, som börjar med $, följt av en klammerparentesavgränsad uppsättning med ett eller flera nästan godtyckliga tecken. och ett vanligt variabelnamn, som också börjar med $, följt av en uppsättning med ett eller flera tecken från en mer restriktiv uppsättning än vad ett klammerparenteserat variabelnamn tillåter. Varje vanligt variabelnamn kan uttryckas med ett motsvarande klammerparenteserat variabelnamn.
$totalCost
$Maximum_Count_26
$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)
${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}
Det finns ingen gräns för längden på ett variabelnamn, alla tecken i ett variabelnamn är betydande och bokstavsfallet är inte distinkt.
Det finns flera olika typer av variabler: användardefinierade (§2.3.2.1), automatisk (§2.3.2.2), och preferens (§2.3.2.3). De kan alla samexistera i samma omfång (§3.5).
Överväg följande funktionsdefinition och -anrop:
function Get-Power ([long]$Base, [int]$Exponent) { ... }
Get-Power 5 3 # $Base is 5, $Exponent is 3
Get-Power -Exponent 3 -Base 5 # " " "
Varje argument skickas genom position eller namn, ett i taget. En uppsättning argument kan dock skickas som en grupp där uppdelningen till enskilda argument hanteras av körningsmiljön. Den här automatiska argumentexpansionen kallas splatting. Till exempel
$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
Detta uppnås genom att använda @ i stället för $ som det första tecknet för variabeln som skickas.
Den här notationen kan endast användas i ett argument till ett kommando.
Namnen partitioneras i olika namnområden som var och en lagras på en virtuell enhet (§3.1). Variabler lagras till exempel på Variable:, miljövariabler lagras på Env:, funktioner lagras på Function:och alias lagras på Alias:. Alla dessa namn kan användas som variabler med hjälp av variabelnamnområde produktion inom . Till exempel
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
All användning av ett variabelnamn med ett explicit Variable: namnområde motsvarar användningen av samma variabelnamn utan den kvalificeringen. Till exempel är $v och $Variable:v utbytbara.
Förutom att definieras på språket kan variabler också definieras av cmdleten New-Variable.
2.3.2.1 Användardefinierade variabler
Alla variabelnamn som tillåts av grammatiken men som inte används av automatiska variabler eller inställningsvariabler är tillgängliga för användardefinierade variabler.
Användardefinierade variabler skapas och hanteras av användardefinierade skript.
2.3.2.2 Automatiska variabler
Automatiska variabler lagrar tillståndsinformation om PowerShell-miljön. Deras värden kan läsas i användarskrivna skript men inte skrivas.
Not
Tabellen som ursprungligen hittades i det här dokumentet togs bort för att minska dupliceringen. En fullständig lista över automatiska variabler finns i about_Automatic_Variables.
2.3.2.3 Inställningsvariabler
Inställningsvariabler lagrar användarinställningar för sessionen. De skapas och initieras av PowerShell-körningsmiljön. Deras värden kan läsas och skrivas i användarskrivna skript.
Not
Tabellen som ursprungligen hittades i det här dokumentet togs bort för att minska dupliceringen. En fullständig lista över inställningsvariabler finns i about_Preference_Variables.
2.3.3 Kommandon
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 Parametrar
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
Beskrivning:
När ett kommando anropas kan information skickas till det via en eller flera argument vars värden nås inifrån kommandot via en uppsättning motsvarande parametrar. Processen för att matcha parametrar till argument kallas parameterbindning.
Det finns tre typer av argument:
[switch]parameter (§8.10.5) – Detta har formuläret command-parameter där first-parameter-char och parameter-chars tillsammans utgör växelnamnet, vilket motsvarar namnet på en parameter (utan dess inledande-) i kommandot som anropas. Om det avslutande kolonet utelämnas anger förekomsten av det här argumentet att motsvarande parameter är inställd på$true. Om det avslutande kolonet finns måste argumentet omedelbart efter ange ett värde av typen bool och motsvarande parameter anges till det värdet. Följande anrop är till exempel likvärdiga:Set-MyProcess -Strict Set-MyProcess -Strict: $trueParameter med argument (§8.10.2) – Det här har formuläret kommandoparameter där first-parameter-char och parameter-chars tillsammans utgör parameternamnet, vilket motsvarar namnet på en parameter (utan dess inledande -) i kommandot som anropas. Det får inte finnas något avslutande kolon. Argumentet som följer omedelbart anger ett associerat värde. Med ett kommando
Get-Power, som har parametrar$Baseoch$Exponent, är till exempel följande anrop likvärdiga:Get-Power -Base 5 -Exponent 3 Get-Power -Exponent 3 -Base 5Positionsargument (§8.10.2) – Argument och deras motsvarande parametrar inuti kommandon har positioner där den första har position noll. Argumentet i position 0 är bundet till parametern i position 0. argumentet i position 1 är bundet till parametern i position 1. och så vidare. Med ett kommando
Get-Power, som till exempel har parametrar$Baseoch$Exponenti position 0 respektive 1, anropar följande kommando det kommandot:Get-Power 5 3
Mer information om de särskilda parametrarna och --finns i --% .
När ett kommando anropas kan ett parameternamn förkortas. varje distinkt inledande del av det fullständiga namnet får användas, förutsatt att det är entydigt med avseende på namnen på de andra parametrar som godkänts av samma kommando.
Information om parameterbindning finns i §8.14.
2.3.5 Literaler
Syntax:
literal:
integer-literal
real-literal
string-literal
2.3.5.1 Numeriska literaler
Det finns två typer av numeriska literaler: heltal (§2.3.5.1.1) och verkliga (§2.3.5.1.2). Båda kan ha suffix för multiplikator (§2.3.5.1.3).
2.3.5.1.1 Heltalsliteraler
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 hexadecimal-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
Beskrivning:
Typen av en heltalsliteral bestäms av dess värde, förekomsten eller frånvaron av långtypssuffixoch förekomsten av en numerisk multiplikator (§2.3.5.1.3).
För en heltalssiffra utan långtypssuffix
- Om dess värde kan representeras av typ int (§4.2.3), är det dess typ;
- Annars, om dess värde kan representeras av typen long (§4.2.3), är det dess typ.
- Annars, om dess värde kan representeras av typen decimal (§2.3.5.1.2), är det dess typ.
- Annars representeras den av typen double (§2.3.5.1.2).
För en heltalsliteral med suffix av lång typ
- Om dess värde kan representeras av typen long (§4.2.3), är det dess typ;
- Annars är literalen felaktigt formad.
I tvåkompletteringsrepresentationen av heltalsvärden finns det ett mer negativt värde än det är positivt. För int-typen är det extra värdet -2147483648. För den långa typen är det extra värdet -9223372036854775808. Även om token 2147483648 normalt skulle behandlas som en literal av typen long, behandlas operatorn och literalen tillsammans som en literal av typen int med det minsta värdet ifall den omedelbart föregås av den unära - operatorn. På samma sätt, även om token 9223372036854775808 normalt skulle behandlas som en verklig literal av typen decimal, om den omedelbart föregås av den unary - operatorn, behandlas operatorn och literalen som en literal av typen long med det minsta värdet.
Några exempel på heltalsliteraler är 123 (int), 123L (lång) och 200000000000 (lång).
Det finns inget som heter en heltalsliteral av typen byte.
2.3.5.1.2 Verkliga literaler
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)
Beskrivning:
En verklig literal kan innehålla en numerisk multiplikator (§2.3.5.1.3).
Det finns två typer av reell literal: double och decimal. Dessa indikeras antingen av frånvaron eller närvaron av decimaltyp-suffix. (Det finns inget sådant som en flyttalsliteral.)
En dubbel verklig literal har typ dubbel (§4.2.4.1). En decimalformigt realt tal har typen decimal (§4.2.4.2). Avslutande nollor i bråkdelen av en verklig decimalliteral är betydande.
Om värdet för exponentdel's decimaltal i en dubbel verklig literal är mindre än det minsta som stöds, är värdet för den dubbla verkliga literalen 0. Om värdet för exponentdel's decimaltal i en decimal verklig literal är mindre än det minsta som stöds, är den literalen dåligt utformad. Om värdet för exponentdel's decimal-siffror i en dubbel eller decimal verklig literal är större än det maximala som stöds, är den literalen dåligt utformad.
Några exempel på dubbla verkliga literaler är 1., 1.23, .45e35, 32.e+12 och 123.456E-231.
Några exempel på verkliga decimalliteraler är 1d (som har skala 0), 1,20d (som har skalning 2), 1,23450e1d (dvs. 12,3450, som har skala 4), 1,2345e3d (dvs. 1234.5, som har skalning 1), 1.2345e-1d (dvs. 0.12345, som har skalning 5) och 1.2345e-3d (dvs. 0.0012345, som har skalning 7).
Not
Eftersom en dubbel literal inte behöver ha en bråkdel eller exponentdel, behövs parenteserna i (123).M för att säkerställa att egenskapen eller metoden M väljs för det heltalsobjekt vars värde är 123. Utan dessa parenteser skulle den verkliga literalen vara dåligt utformad.
Not
Även om PowerShell inte tillhandahåller literaler för infiniteter och NAN, kan dubbla verkliga literalliknande motsvarigheter erhållas från de statiska skrivskyddade egenskaperna PositiveInfinity, NegativeInfinity och NaN av typerna float och double (§4.2.4.1).
Grammatiken tillåter vad som börjar som en dubbel verklig literal att ha ett l eller L typsuffix. En sådan token är egentligen en heltalsliteral vars värde representeras av typen long.
Not
Den här funktionen har bevarats för bakåtkompatibilitet med tidigare versioner av PowerShell. Programmerare avråder dock från att använda heltal i det här formuläret eftersom de enkelt kan dölja literalens faktiska värde. Till exempel har 1.2L värde 1, 1.2345e1L har värdet 12 och 1.2345e-5L har värdet 0, varav inget är omedelbart uppenbart.
2.3.5.1.3 Multiplikatorsuffix
Syntax:
numeric-multiplier: *one of*
kb mb gb tb pb
Beskrivning:
För enkelhetens skull kan heltal och reella literaler innehålla en numerisk multiplikator, vilken indikerar en av de vanligt använda potenserna av 10. numerisk multiplikator kan skrivas i valfri kombination av stora eller små bokstäver.
| Multiplikator | betydelse | Exempel |
|---|---|---|
| Kb | kilobyte (1 024) | 1kb ≡ 1024 |
| mb | megabyte (1 024 x 1 024) | 1.30Dmb ≡ 1363148.80 |
| Gb | gigabyte (1 024 x 1 024 x 1 024) | 0x10Gb ≡ 17179869184 |
| tbc | terabyte (1 024 x 1 024 x 1 024 x 1 024) | 1.4e23tb ≡ 1.5393162788864E+35 |
| Pb | petabyte (1 024 x 1 024 x 1 024 x 1 024 x 1 024) | 0x12Lpb ≡ 20266198323167232 |
2.3.5.2 Strängliteraler
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 @
Beskrivning:
Det finns fyra typer av strängliteraler:
verbatim-string-literal (enkelrads-single-quoted), som är en sekvens med noll eller fler tecken avgränsade av ett par tecken. Exemplen är "" och "röd".
expandable-string-literal (enkelradig dubbelciterad), som är en sekvens med noll eller fler tecken avgränsade med ett par dubbelcitatteckens. Exemplen är "" och "röd".
verbatim-here-string-literal (multi-line single-quoted), som är en sekvens med noll eller fler tecken avgränsade av teckenparen @enstaka citattecken och enstaka citattecken@, alla innehållna på två eller fler källrader. Exempel är:
@' '@ @' line 1 '@ @' line 1 line 2 '@expandable-here-string-literal (multi-line double-quoted), som är en sekvens av noll eller fler tecken avgränsad av teckenparen @dubbelcitattecken och dubbelcitattecken@, helt och hållet placerad på två eller fler källrader. Exempel är:
@" "@ @" line 1 "@ @" line 1 line 2 "@
För verbatim-here-string-literals och expandable-here-string-literals, förutom blanksteg (som ignoreras) får inga tecken följa på samma källrad som det inledande avgränsarteckenparet, och inga tecken får föregå på samma källrad som det avslutande avgränsarteckenparet.
Den brödtexten av en verbatim-here-string-literal eller en expandable-here-string-literal börjar i början av den första källraden efter den inledande avgränsaren och slutar i slutet av den sista källraden före den avslutande avgränsaren. Kroppen kan vara tom. Radavgränsaren på den sista källraden före den avslutande avgränsaren är inte en del av den literalens brödtext.
En literal av någon av dessa typer har typsträng (§4.3.1).
Tecknet som används för att avgränsa en verbatim-string-literal eller expandable-string-literal kan ingå i en sådan strängliteral genom att skriva det tecknet två gånger, i följd. Till exempel 'What''s the time?' och "I said, ""Hello"".". Det dock att ett enkel-citattecken har ingen särskild betydelse i en expanderbar strängliteral, och ett dubbel-citattecken har ingen särskild betydelse i en ordagrann strängliteral.
En expandable-string-literal och en expandable-here-string-literal kan innehålla escape-characters (§2.3.7). När till exempel följande strängliteral skrivs till pipelinen visas resultatet enligt nedan:
"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!
Om en expandable-string-literal eller expandable-here-string-literal innehåller namnet på en variabel, såvida inte namnet omedelbart föregås av ett escape-tecken, ersätts det av strängrepresentationen av variabelns värde (§6.7). Detta kallas variabel ersättning.
Not
Om variabelnamnet är en del av ett större uttryck ersätts endast variabelnamnet. Om $a till exempel är en matris som innehåller elementen 100 och 200 resulterar ">$a.Length<" i >100 200.Length< medan ">$($a.Length)<" resulterar i >2<. Se expansion av underuttryck nedan.
Till exempel källkoden
$count = 10
"The value of `$count is $count"
resulterar i expanderbar-sträng-literal
The value of $count is 10.
Tänk på följande:
$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally
Resultatet är
$a[0] is red blue[0], $a[0] is red
expandable-string-literals och expandable-here-string-literals stöder också en typ av ersättning som kallas underuttrycksexpansion, genom behandling av text i formen $( ... ) som ett underuttryck (§7.1.6). Sådan text ersätts av strängrepresentationen av uttryckets värde (§6.8). Alla blanksteg som används för att separera token i underuttryckinstruktionslista ignoreras när det gäller resultatsträngens konstruktion.
Exemplen,
$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"
resulterar i följande expandable-string-literals:
10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)
Följande källa:
$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"
resulterar i följande expandable-string-literal:
$i, $j, and $k have the values 5 10 15
Dessa fyra rader kunde ha skrivits mer kortfattat på följande sätt:
"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"
I följande exempel
"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"
den resulterande expandable-string-literal är följande:
First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
Som visas kan ett underuttryck innehålla strängliteraler med både variabelsubstitution och expansion av underuttryck. Observera också att avgränsarna för den inre expanderbara strängliteraleninte behöver undkommas. Det faktum att de finns i ett underuttryck innebär att de inte kan vara avslutare för den yttre expanderbara strängliteralen.
En expandable-string-literal eller expandable-here-string-literal som innehåller en variabel substitution eller underuttrycksexpansion utvärderas varje gång som literal används. till exempel
$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"
vilket resulterar i följande expandable-string-literals:
$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<
Innehållet i en verbatim-here-string-literal tas ordagrant, inklusive alla inledande eller avslutande blanksteg i brödtexten. Därför behöver inte inbäddade enkelcitatsteckendubbleras, och det finns ingen ersättning eller expansion. Till exempel
$lit = @'
That's it!
2 * 3 = $(2*3)
'@
vilket resulterar i den bokstavliga betydelsen
That's it!
2 * 3 = $(2*3)
Innehållet i en expanderbar-här-strängliteral är föremål för ersättning och expansion, men alla inledande eller avslutande blanksteg i brödtexten men utanför alla underuttrycks tas ordagrant, och inbäddade dubbelcitatteckenbehöver inte dubbleras. Till exempel
$lit = @"
That's it!
2 * 3 = $(2*3)
"@
vilket resulterar i följande bokstavliga betydelse när det expanderas:
That's it!
2 * 3 = 6
För både verbatim-here-string-literals och expandable-here-string-literals representeras varje radavslutare i texten i den resulterande literalen på ett sätt som definieras av implementationen. Till exempel i
$lit = @"
abc
xyz
"@
den andra raden i kroppen har två inledande blanksteg, och den första och andra raden i kroppen har linjeavgränsare; Dock är terminatorn för den andra raden i kroppen inte del av den kroppen. Den resulterande literalen motsvarar: "abc<implementation-defined character sequence>xyz".
Not
För att underlätta källans läsbarhet kan långa strängliteraler brytas över flera källlinjer utan att radavgränsare infogas. Detta görs genom att skriva varje del som en separat literal och sammanfoga delarna med + operatorn (§7.7.2). Med den här operatorn kan dess operander ange någon av de fyra typerna av stränglitral.
Not
Även om det inte finns något sådant som en teckenliteral i sig, kan samma effekt uppnås genom att komma åt det första tecknet i en sträng med 1 tecken, enligt följande: [char]"A" eller "A"[0].
För både verbatim-here-string-literals och expandable-here-string-literals representeras varje radavgränsare i brödtexten exakt som den angavs.
2.3.5.3 Nullliteral
Se den automatiska variabeln $null (§2.3.2.2).
2.3.5.4 Booleska literaler
Se de automatiska variablerna $false och $true (§2.3.2.2).
2.3.5.5 Arrayliteraler
PowerShell tillåter att uttryck av matristyp (§9) skrivs med kommaoperatorn (§7.2.1), matrisuttryck (§7.1.7), den binära kommaoperatorn (§7.3), och rangeoperatorn (§7.4).
2.3.5.6 Hashlitraler
PowerShell tillåter att uttryck av typen Hashtable (§10) skrivs med ett hash-literal-expression (§7.1.9)
2.3.5.7 Typnamn
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 Operatörer och skiljetecken
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
Beskrivning:
&& och || är reserverade för framtida användning.
Not
Redigerarens anmärkning: Pipelinekedjeoperatorerna && och || introducerades i PowerShell 7. Se about_Pipeline_Chain_Operators.
Namnet som följer bindestreck i en operatör är reserverat enbart för detta syfte i en operatörskontext.
En operator som börjar med streck får inte ha något tomt utrymme mellan det strecket och den token som följer den.
2.3.7 Undantagna tecken
Syntax:
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Beskrivning:
Ett särskilt tecken är ett sätt att tilldela en särskild tolkning till ett tecken genom att ge det ett backtick-tecken (U+0060) som prefix. Följande tabell visar innebörden av varje flykttecken:
| Undantaget tecken | Betydelse |
|---|---|
`a |
Avisering (U+0007) |
`b |
Backspace (U+0008) |
`f |
Formulärfeed (U+000C) |
`n |
Ny rad (U+000A) |
`r |
Vagnretur (U+000D) |
`t |
Horisontell tabb (U+0009) |
`v |
Lodrät flik (U+0009) |
`' |
Enkelt citattecken (U+0027) |
`" |
Dubbelt citattecken (U+0022) |
`` |
Bakåtsnedstreck (U+0060) |
`0 |
NUL (U+0000) |
`x |
Om x är ett annat tecken än de tecken som visas ovan ignoreras backtick-tecknet och x tas bokstavligen. |
Konsekvensen av den sista posten i tabellen ovan är att blanksteg som annars skulle separera token kan göras till en del av en token i stället. Ett filnamn som innehåller ett blanksteg kan till exempel skrivas som Test` Data.txt (samt 'Test Data.txt' eller "Test Data.txt").