Partager via


about_Quoting_Rules

Description courte

Décrit les règles d’utilisation de guillemets simples et doubles dans PowerShell.

Description longue

Les guillemets sont utilisés pour spécifier une chaîne littérale. Vous pouvez placer une chaîne entre guillemets simples (') ou guillemets doubles (").

Les guillemets sont également utilisés pour créer une chaîne de type here. Une chaîne here est une chaîne à guillemets simples ou à guillemets doubles dans laquelle les guillemets sont interprétés littéralement. Une chaîne here peut s’étendre sur plusieurs lignes. Toutes les lignes d’une chaîne de type here sont interprétées comme des chaînes, même si elles ne sont pas placées entre guillemets.

Dans les commandes sur des ordinateurs distants, les guillemets définissent les parties de la commande exécutées sur l’ordinateur distant. Dans une session à distance, les guillemets déterminent également si les variables d’une commande sont interprétées en premier sur l’ordinateur local ou sur l’ordinateur distant.

Chaînes entre guillemets doubles

Une chaîne placée entre guillemets doubles est une chaîne extensible . Les noms de variables précédés d’un signe dollar ($) sont remplacés par la valeur de la variable avant que la chaîne ne soit transmise à la commande pour traitement.

Par exemple :

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

La sortie de cette commande est :

The value of 5 is 5.

En outre, dans une chaîne entre guillemets doubles, les expressions sont évaluées et le résultat est inséré dans la chaîne. Par exemple :

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

La sortie de cette commande est :

The value of 5 is 5.

Seules les références de variables de base peuvent être incorporées directement dans une chaîne extensible. Les références de variables utilisant l’indexation de tableau ou l’accès aux membres doivent être placées dans une sous-expression. Par exemple :

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

Pour séparer un nom de variable des caractères suivants dans la chaîne, placez-le dans des accolades ({}). Cela est particulièrement important si le nom de la variable est suivi d’un signe deux-points (:). PowerShell prend en compte tout ce qui se trouve entre et $ le : spécificateur d’étendue, ce qui entraîne généralement l’échec de l’interprétation. Par exemple, "$HOME: where the heart is." lève une erreur, mais "${HOME}: where the heart is." fonctionne comme prévu.

Pour empêcher la substitution d’une valeur de variable dans une chaîne entre guillemets doubles, utilisez le caractère backtick (`), qui est le caractère d’échappement PowerShell.

Dans l’exemple suivant, le caractère backtick qui précède la première $i variable empêche PowerShell de remplacer le nom de la variable par sa valeur. Par exemple :

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

La sortie de cette commande est :

The value of $i is 5.

Chaînes entre guillemets uniques

Une chaîne placée entre guillemets simples est une chaîne textuelle . La chaîne est passée à la commande exactement au fur et à mesure que vous la tapez. Aucune substitution n’est effectuée. Par exemple :

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

La sortie de cette commande est :

The value $i is $i.

De même, les expressions dans des chaînes entre guillemets uniques ne sont pas évaluées. Ils sont interprétés comme des littéraux de chaîne. Par exemple :

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

La sortie de cette commande est :

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

Inclusion de guillemets dans une chaîne

Pour faire apparaître des guillemets doubles dans une chaîne, placez la chaîne entière entre guillemets simples. Par exemple :

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

La sortie de cette commande est :

As they say, "live and learn."

Vous pouvez également placer une chaîne entre guillemets uniques dans une chaîne entre guillemets doubles. Par exemple :

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

La sortie de cette commande est :

As they say, 'live and learn.'

Ou, doublez les guillemets autour d’une phrase entre guillemets doubles. Par exemple :

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

La sortie de cette commande est :

As they say, "live and learn."

Pour inclure un guillemet unique dans une chaîne à guillemet unique, utilisez un deuxième guillemet unique consécutif. Par exemple :

'don''t'

La sortie de cette commande est :

don't

Pour forcer PowerShell à interpréter un guillemet double littéralement, utilisez un caractère backtick. Cela empêche PowerShell d’interpréter le guillemet comme un délimiteur de chaînes. Par exemple :

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

Étant donné que le contenu des chaînes entre guillemets uniques est interprété littéralement, le caractère backtick est traité comme un caractère littéral et affiché dans la sortie.

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

Chaînes d’ici

Les règles de guillemet pour les chaînes here sont légèrement différentes.

Une chaîne here est une chaîne entre guillemets simples ou double guillemets entourée de signes at (@). Les guillemets au sein d’une chaîne here sont interprétés littéralement.

Chaîne de type here :

  • s’étend sur plusieurs lignes
  • commence par la marque d’ouverture suivie d’une nouvelle ligne
  • se termine par une nouvelle ligne suivie de la marque fermante
  • inclut chaque ligne entre les marques d’ouverture et de fermeture dans le cadre d’une chaîne unique

Comme les chaînes régulières, les variables sont remplacées par leurs valeurs dans les chaînes here entre guillemets doubles. Dans les chaînes à guillemets uniques, les variables ne sont pas remplacées par leurs valeurs.

Vous pouvez utiliser les chaînes here pour n’importe quel texte, mais elles sont particulièrement utiles pour les types de texte suivants :

  • Texte contenant des guillemets littérals
  • Plusieurs lignes de texte, comme le texte dans un bloc HTML ou XML
  • Texte d’aide d’un script ou d’un document de fonction

Une chaîne de type here peut avoir l’un des formats suivants, où <Enter> représente le caractère masqué de ligne ou de nouvelle ligne ajouté lorsque vous appuyez sur la touche ENTRÉE.

Guillemets doubles :

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

Guillemets uniques :

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

Notes

Le caractère de nouvelle ligne finale fait partie de la marque fermante. Il n’est pas ajouté à la chaîne d’ici.

Une chaîne de type here contient tout le texte entre les marques d’ouverture et de fermeture. Dans la chaîne here, tous les guillemets sont interprétés littéralement. Par exemple :

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

La sortie de cette commande est :

For help, type "get-help"

L’utilisation d’une chaîne here peut simplifier l’utilisation d’une chaîne dans une commande. Par exemple :

@"
Use a quotation mark, like ' or ", to begin a string.
"@

La sortie de cette commande est :

Use a quotation mark, like ' or ", to begin a string.

Dans les chaînes de type here entre guillemets uniques, les variables sont interprétées littéralement et reproduites exactement. Par exemple :

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

La sortie de cette commande est :

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

Dans les chaînes here entre guillemets doubles, les variables sont remplacées par leurs valeurs. Par exemple :

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

La sortie de cette commande est :

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

Les chaînes here sont généralement utilisées pour affecter plusieurs lignes à une variable. Par exemple, la chaîne here suivante affecte une page de XML à la variable $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>
"@

Les chaînes here sont également un format pratique pour l’entrée dans l’applet ConvertFrom-StringData de commande, qui convertit les chaînes ici en tables de hachage. Pour plus d’informations, consultez ConvertFrom-StringData.

Notes

PowerShell permet aux chaînes à guillemets simples ou doubles de s’étendre sur plusieurs lignes sans utiliser la @ syntaxe des chaînes here. Toutefois, la syntaxe de chaîne here complète est l’utilisation recommandée.

Interprétation de chaînes extensibles

Les chaînes développées ne ressemblent pas nécessairement à la sortie par défaut que vous voyez dans la console.

Les collections, y compris les tableaux, sont converties en chaînes en plaçant un espace unique entre les représentations sous forme de chaîne des éléments. Un autre séparateur peut être spécifié en définissant la variable $OFSde préférence . Pour plus d’informations, consultez la variable de $OFS préférence.

Les instances de tout autre type sont converties en chaînes en appelant la ToString() méthode, ce qui peut ne pas donner une représentation significative. Par exemple :

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

Pour obtenir la même sortie que dans la console, utilisez une sous-expression dans laquelle vous dirigez vers Out-String. Appliquez la Trim() méthode si vous souhaitez supprimer les lignes vides de début et de fin.

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

Les paramètres de culture affectent l’interprétation des chaînes

Les ToString() méthodes utilisent les paramètres de culture configurés actuels pour convertir des valeurs en chaînes. Par exemple, la culture de la session PowerShell suivante est définie sur de-DE. Lorsque la ToString() méthode convertit la valeur de $x en chaîne, elle utilise une virgule (,) pour le séparateur décimal. En outre, la ToString() méthode convertit la date en chaîne en utilisant le format approprié pour les paramètres régionaux allemands.

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

Toutefois, PowerShell utilise la culture invariante lors de l’interprétation d’expressions de chaîne extensibles.

PS? "$x"
1.2

PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00

Passage de chaînes entre guillemets à des commandes externes

Certaines commandes natives attendent des arguments qui contiennent des guillemets. PowerShell interprète la chaîne entre guillemets avant de la passer à la commande externe. Cette interprétation supprime les guillemets externes.

Pour plus d’informations sur ce comportement, consultez l’article about_Parsing .

Voir aussi