about_Quoting_Rules

Kort beskrivning

Beskriver regler för användning av enkla och dubbla citattecken i PowerShell.

Lång beskrivning

Citattecken används för att ange en strängliteral. Du kan omsluta 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 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 ä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 också om variablerna i ett kommando tolkas först på den lokala datorn eller på fjärrdatorn.

Dubbelciterade strängar

En sträng som omges av dubbla citattecken är en expanderbar sträng. Variabelnamn 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."

Utdata för det här kommandot är:

The value of 5 is 5.

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

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

Utdata för det här kommandot är:

The value of 5 is 5.

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

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

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

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

Utdata för det här kommandot ä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.'

Utdata för 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. Exempel:

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

Utdata för 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. Exempel:

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

Utdata för 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. Exempel:

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

Utdata för det här kommandot är:

As they say, 'live and learn.'

Eller dubbla citattecknen runt en dubbelciterad fras. Exempel:

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

Utdata för 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. Exempel:

'don''t'

Utdata för 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. 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.

Här-strängar

Citatreglerna för här-strängar skiljer sig något åt.

En här-sträng är en enkel-citerad eller dubbel-citerad 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 slutmarkeringen
  • 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 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 radmatningstecknet eller det nya dolda tecknet 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 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 öppnings- och slutmarkeringarna. I den här strängen tolkas alla citattecken bokstavligen. Exempel:

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

Utdata för 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. Exempel:

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

Utdata för det här kommandot är:

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

I enkla här-strängar tolkas variabler bokstavligen och reproduceras exakt. Exempel:

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

Utdata för 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 sina värden. Exempel:

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

Utdata för 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 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 här-strängar till hash-tabeller. Mer information finns i ConvertFrom-StringData.

Anteckning

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 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 som 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

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