about_Quoting_Rules
Korte beschrijving
Beschrijft regels voor het gebruik van enkele en dubbele aanhalingstekens in PowerShell.
Lange beschrijving
Bij het parseren ziet PowerShell er eerst naar uit om invoer als een expressie te interpreteren. Maar wanneer er een aanroep van een opdracht wordt aangetroffen, wordt het parseren voortgezet in de argumentmodus. Niet-numerieke argumenten zonder aanhalingstekens worden behandeld als tekenreeksen. Als u argumenten hebt die spaties bevatten, zoals paden, moet u deze argumentwaarden tussen aanhalingstekens plaatsen. Zie de sectie Argumentmodus van about_Parsing voor meer informatie over het parseren van argumenten.
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 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 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.
Notitie
PowerShell behandelt slimme aanhalingstekens, ook wel typografische of gekrulde aanhalingstekens genoemd, als normale aanhalingstekens voor tekenreeksen. Gebruik geen slimme aanhalingstekens om tekenreeksen te plaatsen. Wanneer u tekenreeksen schrijft die slimme aanhalingstekens bevatten, volgt u de richtlijnen in de sectie Inclusief aanhalingstekens in een tekenreekssectie van dit document. Zie de sectie Slimme aanhalingstekens in het Wikipedia-artikel Aanhalingstekens in het Engels voor meer informatie over slimme aanhalingstekens.
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.
Voorbeeld:
$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. Voorbeeld:
"The value of $(2+3) is 5."
De uitvoer van deze opdracht is:
The value of 5 is 5.
Alleen basisvariabeleverwijzingen kunnen rechtstreeks worden ingesloten in een uitbreidbare tekenreeks. Variabelenverwijzingen met behulp van matrixindexering of toegang tot leden moeten worden ingesloten in een subexpressie. Voorbeeld:
"PS version: $($PSVersionTable.PSVersion)"
PS version: 5.1.22621.4111
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 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 teken backtick (`
), 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 waarde.
Voorbeeld:
$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 exact doorgegeven aan de opdracht terwijl u deze typt. Er wordt geen vervanging uitgevoerd. Voorbeeld:
$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. Voorbeeld:
'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. Voorbeeld:
'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 aanhalingstekens insluiten in een tekenreeks met dubbele aanhalingstekens. Voorbeeld:
"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. Voorbeeld:
"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. Voorbeeld:
'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. Voorbeeld:
"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.
Omdat In PowerShell slimme aanhalingstekens worden geïnterpreteerd, zoals ‘
, ’
en “
, ”
als normale aanhalingstekens, moeten ook slimme aanhalingstekens worden ontsnapt.
Voorbeeld:
"Double ““smart quotation marks`” must be escaped in a double-quoted string."
'Single ‘‘smart quotation marks’’ must be escaped in a single-quoted string.'
Double “smart quotation marks” must be escaped in a double-quoted string.
Single ‘smart quotation marks’ must be escaped in a single-quoted string.
Hier-tekenreeksen
De aanhalingsregels voor hier-tekenreeksen verschillen enigszins.
Een here-string 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 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 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 regelfeed of het verborgen nieuwe regelteken 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 nieuwe regelteken maakt deel uit van het eindteken. 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. Voorbeeld:
@"
For help, type "get-help"
"@
De uitvoer van deze opdracht is:
For help, type "get-help"
Met behulp van een here-string kunt u het gebruik van een tekenreeks in een opdracht vereenvoudigen. Voorbeeld:
@"
Use a quotation mark, like ' or ", to begin a string.
"@
De uitvoer van deze opdracht is:
Use a quotation mark, like ' or ", to begin a string.
In hier-tekenreeksen met één aanhalingsteken worden variabelen letterlijk geïnterpreteerd en exact gereproduceerd. Voorbeeld:
@'
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. Voorbeeld:
@"
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, die hier-tekenreeksen converteert naar hash-tabellen.
Zie ConvertFrom-StringData
voor meer informatie.
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
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 tussen de tekenreeksweergaven van de elementen te plaatsen. Een ander scheidingsteken kan worden opgegeven door de voorkeursvariabele $OFS
in 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, wat mogelijk geen zinvolle weergave geeft. Voorbeeld:
"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
Cultuurinstellingen zijn van invloed op tekenreeksinterpretatie
De ToString()
methoden gebruiken de huidige geconfigureerde cultuurinstellingen om waarden te converteren naar tekenreeksen. De cultuur van de volgende PowerShell-sessie is bijvoorbeeld ingesteld op de-DE
. Wanneer de ToString()
methode de waarde converteert $x
naar een tekenreeks, gebruikt deze een komma (,
) voor het decimaalteken. ToString()
De methode converteert de datum ook naar een tekenreeks met behulp van de juiste indeling voor de Duitse landinstellingen.
PS> Get-Culture
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
PS> $x = 1.2
PS> $x.ToString()
1,2
PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00
PowerShell maakt echter gebruik van de invariante cultuur bij het interpreteren van uitbreidbare tekenreeksexpressies.
PS? "$x"
1.2
PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00
Tekenreeksen tussen aanhalen en doorgeven aan externe opdrachten
Sommige systeemeigen opdrachten verwachten argumenten die aanhalingstekens bevatten. PowerShell interpreteert de tekenreeks tussen aanhalen 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.