Share via


about_Quoting_Rules

Korte beschrijving

Beschrijft regels voor het gebruik van enkele en dubbele aanhalingstekens in PowerShell.

Lange beschrijving

Aanhalingstekens worden gebruikt om een letterlijke tekenreeks op te geven. U kunt een tekenreeks tussen enkele aanhalingstekens (') of dubbele aanhalingstekens () plaatsen."

Aanhalingstekens worden ook gebruikt om een hier-tekenreeks te maken. Een hier-tekenreeks is een tekenreeks met één of twee aanhalingstekens waarin letterlijk aanhalingstekens worden geïnterpreteerd. Een here-tekenreeks kan meerdere regels omvatten. Alle regels in een here-tekenreeks worden geïnterpreteerd als tekenreeksen, ook al staan ze niet tussen aanhalingstekens.

In opdrachten voor externe computers definiëren aanhalingstekens de onderdelen van de opdracht die op de externe computer worden uitgevoerd. In een externe sessie bepalen aanhalingstekens ook of de variabelen in een opdracht eerst worden geïnterpreteerd op de lokale computer of op de externe computer.

Tekenreeksen met dubbele aantekening

Een tekenreeks tussen dubbele aanhalingstekens is een uitbreidbare tekenreeks. Namen van variabelen die worden voorafgegaan door een dollarteken ($) worden vervangen door de waarde van de variabele voordat de tekenreeks wordt doorgegeven aan de opdracht voor verwerking.

Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

The value of 5 is 5.

In een tekenreeks met dubbele aanhalingstekens worden expressies geëvalueerd en wordt het resultaat ingevoegd in de tekenreeks. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

The value of 5 is 5.

Alleen eenvoudige variabeleverwijzingen kunnen rechtstreeks worden ingesloten in een uitbreidbare tekenreeks. Variabelenverwijzingen met behulp van matrixindexering of lidtoegang moeten worden ingesloten in een subexpressie. Bijvoorbeeld:

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

Als u de naam van een variabele wilt scheiden van de volgende tekens in de tekenreeks, plaatst u deze tussen accolades ({}). Dit is vooral belangrijk als de naam van de variabele wordt gevolgd door een dubbele punt (:). PowerShell houdt rekening met alles tussen de $ en de : bereikaanduiding, waardoor de interpretatie meestal mislukt. Genereert bijvoorbeeld "$HOME: where the heart is." een fout, maar "${HOME}: where the heart is." werkt zoals bedoeld.

Als u wilt voorkomen dat een variabele waarde in een tekenreeks met dubbele aanhalingstekens wordt vervangen, gebruikt u het backtick-teken (`), het PowerShell-escapeteken.

In het volgende voorbeeld voorkomt het backtick-teken dat voorafgaat aan de eerste $i variabele dat PowerShell de naam van de variabele vervangt door de waarde. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

The value of $i is 5.

Tekenreeksen met één aantekening

Een tekenreeks tussen enkele aanhalingstekens is een verbatimtekenreeks . De tekenreeks wordt precies doorgegeven aan de opdracht terwijl u deze typt. Er wordt geen vervanging uitgevoerd. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

The value $i is $i.

Expressies in tekenreeksen met één aantekening worden ook niet geëvalueerd. Ze worden geïnterpreteerd als letterlijke tekenreeksen. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

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

Aanhalingstekens opnemen in een tekenreeks

Als u dubbele aanhalingstekens wilt weergeven in een tekenreeks, plaatst u de hele tekenreeks tussen enkele aanhalingstekens. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

As they say, "live and learn."

U kunt ook een tekenreeks met enkel aanhalingstekens insluiten in een tekenreeks met dubbele aanhalingstekens. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

As they say, 'live and learn.'

Of dubbel de aanhalingstekens rond een woordgroep met dubbele aanhalingstekens. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

As they say, "live and learn."

Als u één aanhalingsteken wilt opnemen in een tekenreeks met één aanhalingsteken, gebruikt u een tweede opeenvolgend aanhalingsteken. Bijvoorbeeld:

'don''t'

De uitvoer van deze opdracht is:

don't

Als u wilt afdwingen dat powershell een dubbel aanhalingsteken letterlijk interpreteert, gebruikt u een backtick-teken. Dit voorkomt dat PowerShell het aanhalingsteken als tekenreeksscheidingsteken interpreteert. Bijvoorbeeld:

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

Omdat de inhoud van tekenreeksen met één aanhalingsteken letterlijk wordt geïnterpreteerd, wordt het backtick-teken behandeld als een letterlijk teken en weergegeven in de uitvoer.

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

Hier-tekenreeksen

De aanhalingsregels voor hier-tekenreeksen zijn iets anders.

Een hier-tekenreeks is een tekenreeks met enkel of dubbel aanhalingstekens (@). Aanhalingstekens binnen een hier-tekenreeks worden letterlijk geïnterpreteerd.

Een hier-tekenreeks:

  • omspant meerdere regels
  • begint met de openingsmarkering gevolgd door een nieuwe regel
  • eindigt met een nieuwe regel gevolgd door de afsluitende markering
  • bevat elke lijn tussen de openings- en sluitmarkeringen als onderdeel van één tekenreeks

Net als gewone tekenreeksen worden variabelen vervangen door hun waarden in hier dubbel geciteerde tekenreeksen. In tekenreeksen met één aantekening worden variabelen niet vervangen door hun waarden.

U kunt hier-tekenreeksen gebruiken voor elke tekst, maar ze zijn met name handig voor de volgende soorten tekst:

  • Tekst met letterlijke aanhalingstekens
  • Meerdere regels tekst, zoals de tekst in een HTML- of XML-blok
  • De Help-tekst voor een script- of functiedocument

Een here-tekenreeks kan een van de volgende indelingen hebben, waarbij <Enter> het verborgen teken voor de regelfeed of nieuwe regel staat dat wordt toegevoegd wanneer u op enter drukt .

Dubbele aanhalingstekens:

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

Enkele aanhalingstekens:

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

Notitie

Het laatste teken voor de nieuwe regel maakt deel uit van het afsluitende teken. Deze wordt niet toegevoegd aan de here-tekenreeks.

Een here-tekenreeks bevat alle tekst tussen de openings- en eindmarkeringen. In de hier-tekenreeks worden alle aanhalingstekens letterlijk geïnterpreteerd. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

For help, type "get-help"

Het gebruik van een hier-tekenreeks kan het gebruik van een tekenreeks in een opdracht vereenvoudigen. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

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

In tekenreeksen met één aanhalingsteken worden variabelen letterlijk geïnterpreteerd en exact gereproduceerd. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

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

In hier dubbel geciteerde tekenreeksen worden variabelen vervangen door hun waarden. Bijvoorbeeld:

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

De uitvoer van deze opdracht is:

Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

Hier-tekenreeksen worden meestal gebruikt om meerdere regels toe te wijzen aan een variabele. Met de volgende tekenreeks wordt bijvoorbeeld een pagina met XML toegewezen aan de variabele $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>
"@

Here-tekenreeksen zijn ook een handige indeling voor invoer in de ConvertFrom-StringData cmdlet, waarmee here-tekenreeksen worden geconverteerd naar hashtabellen. Voor meer informatie raadpleegt u ConvertFrom-StringData.

Notitie

Met PowerShell kunnen tekenreeksen met dubbele of enkelvoudige aantekeningen meerdere regels omvatten zonder de @ syntaxis van hier-tekenreeksen te gebruiken. De syntaxis van de volledige hier-tekenreeks is echter het voorkeursgebruik.

Interpretatie van uitbreidbare tekenreeksen

Uitgevouwen tekenreeksen zien er niet noodzakelijkerwijs hetzelfde uit als de standaarduitvoer die u in de console ziet.

Verzamelingen, inclusief matrices, worden geconverteerd naar tekenreeksen door één spatie te plaatsen tussen de tekenreeksweergaven van de elementen. U kunt een ander scheidingsteken opgeven door voorkeursvariabele $OFSin te stellen. Zie de $OFS voorkeursvariabele voor meer informatie.

Exemplaren van een ander type worden geconverteerd naar tekenreeksen door de ToString() methode aan te roepen die mogelijk geen zinvolle weergave geeft. Bijvoorbeeld:

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

Als u dezelfde uitvoer wilt krijgen als in de console, gebruikt u een subexpressie waarin u doorsluist naar Out-String. Pas de Trim() methode toe als u eventuele voorloop- en volglijnen wilt verwijderen.

"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name                           Value
----                           -----
key                            value

Tekenreeksen met aanquoten doorgeven aan externe opdrachten

Bij sommige systeemeigen opdrachten worden argumenten verwacht die aanhalingstekens bevatten. PowerShell interpreteert de tekenreeks met aan geciteerde gegevens voordat deze wordt doorgegeven aan de externe opdracht. Met deze interpretatie worden de buitenste aanhalingstekens verwijderd.

Zie het artikel about_Parsing voor meer informatie over dit gedrag.

Zie ook