about_Quoting_Rules
Kort beskrivning
Beskriver regler för användning av enkla och dubbla citattecken i PowerShell.
Lång beskrivning
Vid parsning ser PowerShell först ut att tolka indata som ett uttryck. Men när ett kommandoanrop påträffas fortsätter parsningen i argumentläge. Icke-numeriska argument utan citattecken behandlas som strängar. Om du har argument som innehåller blanksteg, till exempel sökvägar, måste du omsluta argumentvärdena med citattecken. Mer information om argumentparsning finns i avsnittet Argumentläge i about_Parsing.
Citattecken används för att ange en literalsträng. Du kan omsluta en sträng med enkla citattecken ('
) eller dubbla citattecken ("
).
Citattecken används också för att skapa en here-string. En här-sträng är en enkel- eller dubbelciterad sträng där citattecken tolkas bokstavligen. En här-sträng kan sträcka sig över flera rader. Alla rader i en här-sträng tolkas som strängar, även om de inte omges av citattecken.
I kommandon till fjärrdatorer definierar citattecken de delar av kommandot som körs på fjärrdatorn. I en fjärrsession avgör citattecken även om variablerna i ett kommando tolkas först på den lokala datorn eller på fjärrdatorn.
Kommentar
PowerShell behandlar smarta citattecken, även kallade typografiska eller kladdiga citattecken, som normala citattecken för strängar. Använd inte smarta citattecken för att omsluta strängar. När du skriver strängar som innehåller smarta citattecken följer du anvisningarna i avsnittet Inkludera citattecken i en sträng i det här dokumentet. Mer information om smarta citattecken finns i avsnittet Smarta citattecken i Wikipedia-artikeln Citattecken på engelska.
Dubbelciterade strängar
En sträng som omges av dubbla citattecken är en expanderbar sträng. Variabelnamn som föregås av ett dollartecken ($
) ersätts med variabelns värde innan strängen skickas till kommandot för bearbetning.
Till exempel:
$i = 5
"The value of $i is $i."
Utdata från det här kommandot är:
The value of 5 is 5.
I en dubbelciterad sträng utvärderas även uttryck och resultatet infogas i strängen. Till exempel:
"The value of $(2+3) is 5."
Utdata från det här kommandot är:
The value of 5 is 5.
Endast grundläggande variabelreferenser kan bäddas in direkt i en expanderbar sträng. Variabler som refererar till matrisindexering eller medlemsåtkomst måste omges av ett underuttryck. Till exempel:
"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.4.5
Om du vill separera ett variabelnamn från efterföljande tecken i strängen omger du det i klammerparenteser ({}
). Detta är särskilt viktigt om variabelnamnet följs av ett kolon (:
). PowerShell tar hänsyn till allt mellan $
och :
en omfångspecificerare, vilket vanligtvis gör att tolkningen misslyckas. Till exempel "$HOME: where the heart is."
genererar ett fel, men "${HOME}: where the heart is."
fungerar som avsett.
Om du vill förhindra ersättning av ett variabelvärde i en dubbelciterad sträng använder du backtick-tecknet (`
), som är PowerShell-escape-tecknet.
I följande exempel förhindrar backtick-tecknet som föregår den första $i
variabeln PowerShell från att ersätta variabelnamnet med dess värde.
Till exempel:
$i = 5
"The value of `$i is $i."
Utdata från det här kommandot är:
The value of $i is 5.
Enciterade strängar
En sträng som omges av enkla citattecken är en ordagrann sträng. Strängen skickas till kommandot exakt när du skriver den. Ingen ersättning utförs. Till exempel:
$i = 5
'The value of $i is $i.'
Utdata från det här kommandot är:
The value $i is $i.
På samma sätt utvärderas inte uttryck i enciterade strängar. De tolkas som strängliteraler. Till exempel:
'The value of $(2+3) is 5.'
Utdata från det här kommandot är:
The value of $(2+3) is 5.
Inkludera citattecken i en sträng
Om du vill att dubbla citattecken ska visas i en sträng omger du hela strängen inom enkla citattecken. Till exempel:
'As they say, "live and learn."'
Utdata från det här kommandot är:
As they say, "live and learn."
Du kan också omsluta en sträng med en citattecken i en dubbelciterad sträng. Till exempel:
"As they say, 'live and learn.'"
Utdata från det här kommandot är:
As they say, 'live and learn.'
Eller dubbla citattecknen runt en dubbelciterad fras. Till exempel:
"As they say, ""live and learn."""
Utdata från det här kommandot är:
As they say, "live and learn."
Om du vill inkludera ett enkelt citattecken i en sträng med en citattecken använder du ett andra på varandra följande citattecken. Till exempel:
'don''t'
Utdata från det här kommandot är:
don't
Om du vill tvinga PowerShell att tolka ett dubbelt citattecken bokstavligen använder du ett backtick-tecken. Detta förhindrar att PowerShell tolkar citattecknet som en stränggränsare. Till exempel:
"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'
Eftersom innehållet i enciterade strängar tolkas bokstavligen behandlas backtick-tecknet som ett literaltecken och visas i utdata.
Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.
Eftersom PowerShell tolkar smarta citattecken, till exempel ‘
, ’
, “
och ”
, som normala citattecken, måste även smarta citattecken vara undantagna.
Till exempel:
"Double ““smart quotation marks`” must be escaped in a double-quoted string."
'Single ‘‘smart quotation marks’’ must be escaped in a single-quoted string.'
Double “smart quotation marks” must be escaped in a double-quoted string.
Single ‘smart quotation marks’ must be escaped in a single-quoted string.
Här-strängar
Citatreglerna för here-strings skiljer sig något åt.
En här-sträng är en enkel-citerad eller dubbelciterad sträng omgiven av vid tecken (@
). Citattecken inom en här-sträng tolkas bokstavligen.
En här-sträng:
- sträcker sig över flera rader
- börjar med öppningsmarkeringen följt av en ny rad
- slutar med en ny rad följt av stängningsmarkeringen
- innehåller varje rad mellan öppnings- och slutmarkeringarna som en del av en enda sträng
Precis som vanliga strängar ersätts variabler med sina värden i dubbelciterade här-strängar. I enkla här-strängar ersätts inte variabler med deras värden.
Du kan använda här-strängar för valfri text, men de är särskilt användbara för följande typer av text:
- Text som innehåller literala citattecken
- Flera textrader, till exempel texten i ett HTML- eller XML-block
- Hjälptexten för ett skript eller funktionsdokument
En här-sträng kan ha något av följande format, där <Enter>
representerar radmatningen eller det dolda tecknet för ny rad som läggs till när du trycker på RETUR-tangenten.
Dubbla citattecken:
@"<Enter>
<string> [string] ...<Enter>
"@
Enkla citattecken:
@'<Enter>
<string> [string] ...<Enter>
'@
Kommentar
Det sista newline-tecknet är en del av slutmarkeringen. Den läggs inte till i här-strängen.
En här-sträng innehåller all text mellan inledande och avslutande markeringar. I den här strängen tolkas alla citattecken bokstavligen. Till exempel:
@"
For help, type "get-help"
"@
Utdata från det här kommandot är:
For help, type "get-help"
Att använda en här-sträng kan förenkla användningen av en sträng i ett kommando. Till exempel:
@"
Use a quotation mark, like ' or ", to begin a string.
"@
Utdata från det här kommandot är:
Use a quotation mark, like ' or ", to begin a string.
I enkla här-strängar tolkas variabler bokstavligen och återges exakt. Till exempel:
@'
The $profile variable contains the path
of your PowerShell profile.
'@
Utdata från det här kommandot är:
The $profile variable contains the path
of your PowerShell profile.
I dubbelciterade här-strängar ersätts variabler med deras värden. Till exempel:
@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@
Utdata från det här kommandot är:
Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.
Här-strängar används vanligtvis för att tilldela flera rader till en variabel. Följande här sträng tilldelar till exempel en sida med XML till variabeln $page.
$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
<command:name>
Format-Table
</command:name>
<maml:description>
<maml:para>Formats the output as a table.</maml:para>
</maml:description>
<command:verb>format</command:verb>
<command:noun>table</command:noun>
<dev:version></dev:version>
</command:details>
...
</command:command>
"@
Här-strängar är också ett praktiskt format för indata till cmdleten ConvertFrom-StringData
, som konverterar here-strings till hash-tabeller.
Mer information finns i ConvertFrom-StringData
.
Kommentar
Med PowerShell kan dubbel- eller enkelciterade strängar sträcka sig över flera rader utan att använda syntaxen för @
här-strängar. Men fullständig syntax för här-strängen är den föredragna användningen.
Tolkning av utökningsbara strängar
Expanderade strängar ser inte nödvändigtvis likadana ut som de standardutdata som visas i konsolen.
Samlingar, inklusive matriser, konverteras till strängar genom att placera ett enda blanksteg mellan strängrepresentationerna av elementen. En annan avgränsare kan anges genom att ange inställningsvariabeln $OFS
. Mer information finns i inställningsvariabeln$OFS
.
Instanser av någon annan typ konverteras till strängar genom att anropa ToString()
metoden, vilket kanske inte ger en meningsfull representation. Till exempel:
"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable
Om du vill få samma utdata som i konsolen använder du en underuttryck där du rör till Out-String
. Trim()
Använd metoden om du vill ta bort inledande och avslutande tomma rader.
"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name Value
---- -----
key value
Kulturinställningar påverkar strängtolkning
Metoderna ToString()
använder de aktuella konfigurerade kulturinställningarna för att konvertera värden till strängar. Kulturen i följande PowerShell-session är till exempel inställd på de-DE
. ToString()
När metoden konverterar värdet $x
för till en sträng använder den ett kommatecken (,
) för decimalavgränsaren. ToString()
Metoden konverterar också datumet till en sträng med lämpligt format för de tyska nationella inställningarna.
PS> Get-Culture
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
PS> $x = 1.2
PS> $x.ToString()
1,2
PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00
PowerShell använder dock den invarianta kulturen när du tolkar utökningsbara stränguttryck.
PS? "$x"
1.2
PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00
Skicka citerade strängar till externa kommandon
Vissa interna kommandon förväntar sig argument som innehåller citattecken. PowerShell tolkar den citerade strängen innan den skickas till det externa kommandot. Den här tolkningen tar bort de yttre citattecken.
Mer information om det här beteendet finns i artikeln about_Parsing .