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 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.

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: 7.2.0

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.

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 $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, 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.

Zie ook