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 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 uitvouwbare 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 toegang tot leden moeten worden ingesloten in een subexpressie. Bijvoorbeeld:
"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.2.0
Als u een variabelenaam wilt scheiden van 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 powerShell dat voorafgaat aan de eerste $i variabele de naam van de variabele 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 aantekening 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 in een tekenreeks wilt plaatsen, 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 één aanhalingsteken in een tekenreeks met dubbele aanhalingstekens insluiten. 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 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 interpreteert als tekenreeksscheidingsteken. 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 beschouwd 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:
- meerdere regels omvat
- begint met de openingsmarkering gevolgd door een nieuwe regel
- eindigt met een nieuwe regel gevolgd door de afsluitende markering
- bevat elke regel tussen de openings- en afsluitmarkeringen 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 vooral 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 regelfeed of het verborgen teken voor de nieuwe regel wordt weergegeven dat wordt toegevoegd wanneer u op de Enter-toets drukt.
Dubbele aanhalingstekens:
@"<Enter>
<string> [string] ...<Enter>
"@
Enkele aanhalingstekens:
@'<Enter>
<string> [string] ...<Enter>
'@
Notitie
Het laatste nieuwe regelteken maakt deel uit van het slotteken. Deze wordt niet toegevoegd aan de hier-tekenreeks.
Een hier-tekenreeks bevat alle tekst tussen de openings- en afsluitmarkeringen. 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 vereenvoudigen met behulp van een tekenreeks in een opdracht. Bijvoorbeeld:
@"
Use a quotation mark (') to begin a string.
"@
De uitvoer van deze opdracht is:
Use a quotation mark (') to begin a string.
In enkele aanhalingstekenreeksen 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 aanhalingstekenreeksen 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 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, waarmee hier tekenreeksen worden geconverteerd naar hashtabellen.
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 per se 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 de 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 krijgen als in de console, gebruikt u een subexpressie waarin u doorsluist naar 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
Doorgegeven tekenreeksen aan externe opdrachten
Sommige systeemeigen opdrachten verwachten argumenten die aanhalingstekens bevatten. PowerShell interpreteert de aan geciteerde tekenreeks voordat deze wordt doorgegeven aan de externe opdracht. Met deze interpretatie worden de buitenste aanhalingstekens verwijderd.
Zie het about_Parsing artikel voor meer informatie over dit gedrag.