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änglitteral. 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 sträng med enkla citattecken eller dubbla citattecken 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 också om variablerna i ett kommando tolkas först på den lokala datorn eller på fjärrdatorn.

Strängar med dubbla citattecken

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.

Ett 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 dubbel citerad sträng utvärderas dessutom uttryck och resultatet infogas i strängen. Ett exempel:

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

Utdata från det här kommandot är:

The value of 5 is 5.

Endast enkla variabelreferenser kan bäddas in direkt i en expanderbar sträng. Variabelreferenser som använder matrisindexering eller medlemsåtkomst måste omges av ett undertryck. Ett exempel:

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

Om du vill separera ett variabelnamn från efterföljande tecken i strängen omsluter du det inom kparenteser ( {} ). 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 tolkning misslyckas. Kastar till "$HOME: where the heart is." exempel ett fel, men "${HOME}: where the heart is." fungerar som avsett.

Om du vill förhindra att ett variabelvärde ersätts i en sträng med dubbla citattecken använder du bakåtklickstecknet ( ), som ` är PowerShell-escape-tecknet.

I följande exempel förhindrar det bakåtklickstecken som föregår den första variabeln PowerShell från $i att ersätta variabelnamnet med dess värde. Ett exempel:

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

Utdata från det här kommandot är:

The value of $i is 5.

Strängar med enkla citattecken

En sträng som omges av enkla citattecken är en ordagrann sträng. Strängen skickas till kommandot precis som du skriver den. Ingen ersättning utförs. Ett 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 strängar med enkla citattecken. De tolkas som literaler. Ett 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 göra så att dubbla citattecken visas i en sträng omsluter du hela strängen med enkla citattecken. Ett exempel:

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

Utdata från det här kommandot är:

As they say, "live and learn."

Du kan också omge en sträng med enkla citattecken i en sträng med dubbla citattecken. Ett 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 fras med dubbla citattecken. Ett 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 enkelt citattecken i följd. Ett 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ängavgränsare. Ett exempel:

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

Eftersom innehållet i strängar med enkla citattecken tolkas bokstavligen behandlas bakåtklickstecknet 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 sträng med enkla citattecken eller dubbla citattecken 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.

Precis som vanliga strängar ersätts variabler med deras värden i dubbla citattecken här strängar. I enkla här citerade 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 en HTML- eller XML-fil
  • Hjälptext för ett skript eller ett funktionsdokument

En här-sträng kan ha något av följande format, där representerar det dolda tecknet linefeed eller ny rad som läggs till när du <Enter> trycker på RETUR-tangenten.

Dubbla citattecken:

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

Enkla citattecken:

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

I båda formaten måste det avslutande citattecknet vara det första tecknet på raden.

En här-sträng innehåller all text mellan de två dolda tecknen. I den här strängen tolkas alla citattecken bokstavligen. Ett 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. Ett exempel:

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

Utdata från det här kommandot är:

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

I enkla här citerade här strängar tolkas variabler bokstavligen och återges exakt. Ett 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 här-strängar med dubbla citattecken ersätts variabler med deras värden. Ett 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 XML-sida till $page variabeln.

$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, som konverterar ConvertFrom-StringData här-strängar till hash-tabeller. Mer information finns i ConvertFrom-StringData.

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 blanksteg mellan strängrepresentationerna av elementen. En annan avgränsare kan anges genom att ange inställningsvariabeln $OFS . Mer information finns i $OFS inställningsvariabeln.

Instanser av andra typer konverteras till strängar genom att anropa metoden ToString() som kanske inte ger en meningsfull representation. Ett exempel:

"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable

Om du vill få samma utdata som i -konsolen använder du en underutmatning där du rör till Out-String . Använd metoden Trim() om du vill ta bort eventuella 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 vidarebefordras till det externa kommandot. Den här tolkning tar bort de yttre citatt tecknen.

Mer information om det här beteendet finns i about_Parsing artikeln.

Se även

about_Parsing

about_Special_Characters

ConvertFrom-StringData