Dela via


about_Quoting_Rules

Kort beskrivning

Beskriver regler för att använda enkla och dubbla citattecken i PowerShell.

Lång beskrivning

Citattecken används för att ange en strängliteral. Du kan omge en sträng med enkla citattecken (') eller dubbla citattecken (").

Citattecken används också för att skapa en här-sträng. En här-sträng är en enkelciterad 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 är inom 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.

Strängar med dubbla citat

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.

Exempel:

$i = 5
"The value of $i is $i."

Kommandots utdata är:

The value of 5 is 5.

I en sträng med dubbel citattecken utvärderas även uttryck och resultatet infogas i strängen. Exempel:

"The value of $(2+3) is 5."

Kommandots utdata är:

The value of 5 is 5.

Endast grundläggande variabelreferenser kan bäddas in direkt i en expanderbar sträng. Variabelreferenser som använder matrisindexering eller medlemsåtkomst måste omges av ett underuttryck. Exempel:

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.2.0

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ångsspecificerare, 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 sträng med dubbla citattecken 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. Exempel:

$i = 5
"The value of `$i is $i."

Kommandots utdata är:

The value of $i is 5.

Strängar med en citattecken

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. Exempel:

$i = 5
'The value of $i is $i.'

Kommandots utdata är:

The value $i is $i.

På samma sätt utvärderas inte uttryck i strängar med en citattecken. De tolkas som strängliteraler. Exempel:

'The value of $(2+3) is 5.'

Kommandots utdata ä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. Exempel:

'As they say, "live and learn."'

Kommandots utdata är:

As they say, "live and learn."

Du kan också omge en sträng med en citattecken i en sträng med dubbla citattecken. Exempel:

"As they say, 'live and learn.'"

Kommandots utdata är:

As they say, 'live and learn.'

Du kan också dubbla citattecknen runt en fras med dubbla citattecken. Exempel:

"As they say, ""live and learn."""

Kommandots utdata ä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 enkelt citattecken i följd. Exempel:

'don''t'

Kommandots utdata ä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. Exempel:

"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'

Eftersom innehållet i strängar med en citattecken 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.

Här-strängar

Citatreglerna för here-strings skiljer sig något åt.

En här-sträng är en sträng med en citattecken eller dubbel citattecken 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 inledande och avslutande markeringar som en del av en enda sträng

Precis som vanliga strängar ersätts variabler med sina värden i här-strängar med dubbla citat. I enkelciterade 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 bokstavliga citattecken
  • Flera rader med text, 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 det dolda tecknet för radmatning eller ny rad som läggs till när du trycker på RETUR .

Dubbla citattecken:

@"<Enter>
<string> [string] ...<Enter>
"@

Enkla citattecken:

@'<Enter>
<string> [string] ...<Enter>
'@

Anteckning

Det sista nyradstecknet ä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. Exempel:

@"
For help, type "get-help"
"@

Kommandots utdata ä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. Exempel:

@"
Use a quotation mark, like ' or ", to begin a string.
"@

Kommandots utdata är:

Use a quotation mark, like ' or ", to begin a string.

I single-quoted here-strings tolkas variablerna bokstavligen och återges exakt. Exempel:

@'
The $profile variable contains the path
of your PowerShell profile.
'@

Kommandots utdata är:

The $profile variable contains the path
of your PowerShell profile.

I dubbelciterade här-strängar ersätts variabler med sina värden. Exempel:

@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@

Kommandots utdata ä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 används strängar 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.

Anteckning

Med PowerShell kan strängar med dubbla eller enkla citattecken sträcka sig över flera rader utan att använda syntaxen @ för här-strängar. Men fullständig syntax för here-string är den användning som föredras.

Tolkning av expanderbara strängar

Expanderade strängar ser inte nödvändigtvis likadana ut som 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. 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 skickar en pipe 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() Dessutom konverterar metoden 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 .

Se även