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 hier een tekenreeks te maken. Een hier-tekenreeks is een tekenreeks met één aanhalingsteken of een dubbele aanhalingstekens waarin aanhalingstekens letterlijk worden geïnterpreteerd. Een hier-tekenreeks kan meerdere regels omvatten. Alle regels in een hier-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 worden uitgevoerd op de externe computer. 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 aanhalingstekens

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 ook 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 toegang tot leden moeten worden ingesloten in een subexpressie. Bijvoorbeeld:

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

Als u een variabelenaam 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 beschouwt alles tussen de $ en een : bereikaanduiding, waardoor de interpretatie doorgaans 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 backtickteken (`). Dit is het Escape-teken van PowerShell.

In het volgende voorbeeld voorkomt u met het backtickteken dat voorafgaat aan de eerste $i variabele dat PowerShell de naam van de variabele vervangt door de bijbehorende 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 letterlijke tekenreeks. De tekenreeks wordt exact 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.

Op dezelfde manier worden expressies in tekenreeksen met één aanhaftekening 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 plaatsen 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 enkele 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 in een tekenreeks met één aanhalingsteken wilt opnemen, gebruikt u een tweede opeenvolgende enkele aanhalingsteken. Bijvoorbeeld:

'don''t'

De uitvoer van deze opdracht is:

don't

Als u wilt afdwingen dat PowerShell letterlijk een dubbel aanhalingsteken interpreteert, gebruikt u een backtickteken. 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 verschillen enigszins.

Een hier-tekenreeks is een tekenreeks met één aanhalingsteken of een tekenreeks tussen dubbele aanhalingstekens (@). Aanhalingstekens binnen een hier-tekenreeks worden letterlijk geïnterpreteerd.

Een hier-tekenreeks:

  • omvat 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 sluitingsmarkeringen als onderdeel van één tekenreeks

Net als gewone tekenreeksen worden variabelen vervangen door hun waarden in hier-tekenreeksen met dubbele aanhalingstekens. In hier vermelde tekenreeksen worden variabelen niet vervangen door hun waarden.

U kunt hier tekenreeksen gebruiken voor elke tekst, maar deze 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 hier-tekenreeks kan een van de volgende notaties hebben, waarbij <Enter> de linefeed of het verborgen teken voor nieuwe regels wordt weergegeven 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 hier-tekenreeks.

Een hier-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"

Met behulp van een hier-tekenreeks kunt u 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 hier-tekenreeksen met enkele aanhalingstekens 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-tekenreeksen met dubbele aanhalingstekens 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 worden tekenreeksen meestal gebruikt om meerdere regels toe te wijzen aan een variabele. Met de volgende hier-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>
"@

Hier-tekenreeksen zijn ook een handige indeling voor invoer naar de ConvertFrom-StringData cmdlet, die hier-tekenreeksen converteert naar hash-tabellen. Voor meer informatie raadpleegt u ConvertFrom-StringData.

Notitie

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

Interpretatie van uitbreidbare tekenreeksen

Uitgebreide 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 tussen de tekenreeksweergaven van de elementen te plaatsen. Een ander scheidingsteken kan worden opgegeven 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 geven. Bijvoorbeeld:

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

Als u dezelfde uitvoer wilt ophalen als in de console, gebruikt u een subexpressie waarnaar u sluist Out-String. Pas de Trim() methode toe als u voorloop- en volglijnen wilt verwijderen.

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

Aan citeringstekenreeksen doorgeven aan externe opdrachten

Sommige systeemeigen opdrachten verwachten argumenten die aanhalingstekens bevatten. PowerShell interpreteert de aan citeringstekenreeks 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