Partager via


about_Quoting_Rules

Description courte

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

Description longue

Lors de l’analyse, PowerShell cherche d’abord à interpréter l’entrée en tant qu’expression. Toutefois, lorsqu’un appel de commande est rencontré, l’analyse continue en mode argument. Les arguments non numériques sans guillemets sont traités comme des chaînes. Si vous avez des arguments qui contiennent des espaces, tels que des chemins d’accès, vous devez placer ces valeurs d’argument entre guillemets. Pour plus d’informations sur l’analyse des arguments, consultez la section Mode Argument de about_Parsing.

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

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

Dans les commandes des ordinateurs distants, les guillemets définissent les parties de la commande exécutées sur l’ordinateur distant. Dans une session distante, 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.

Remarque

PowerShell traite les guillemets intelligents, également appelés guillemets typographiques ou curly, comme des guillemets normaux pour les chaînes. N’utilisez pas de guillemets intelligents pour placer des chaînes. Lorsque vous écrivez des chaînes qui contiennent des guillemets intelligents, suivez les instructions fournies dans les guillemets inclus dans une section de chaîne de ce document. Pour plus d’informations sur les guillemets intelligents, consultez la section Guillemets intelligents dans l’article Wikipédia Guillemets en anglais.

Chaînes entre guillemets doubles

Une chaîne 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 passée à la commande pour traitement.

Par exemple :

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

La sortie de cette commande est la suivante :

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 la suivante :

The value of 5 is 5.

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

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

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 considère tout entre le $ : spécificateur d’étendue et celui d’une étendue, ce qui provoque 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 la suivante :

The value of $i is 5.

Chaînes entre guillemets simples

Une chaîne entre guillemets simples est une chaîne détaillée . La chaîne est passée à la commande exactement comme vous le tapez. Aucune substitution n’est effectuée. Par exemple :

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

La sortie de cette commande est la suivante :

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 la suivante :

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 la suivante :

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 la suivante :

As they say, 'live and learn.'

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

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

La sortie de cette commande est la suivante :

As they say, "live and learn."

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

'don''t'

La sortie de cette commande est la suivante :

don't

Pour forcer PowerShell à interpréter littéralement un guillemet double, utilisez un caractère backtick. Cela empêche PowerShell d’interpréter le guillemet comme délimiteur de chaîne. 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.

Étant donné que PowerShell interprète des guillemets intelligents, tels que , , et , comme guillemets normaux, les guillemets intelligents doivent également être échappés. Par exemple :

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

Chaînes ici

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

Une chaîne ici est une chaîne entre guillemets simples ou entre guillemets doubles entourée de signes (@). Les guillemets dans une chaîne ici sont interprétés littéralement.

Chaîne ici :

  • 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 seule chaîne

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

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

  • Texte qui contient des guillemets littéraux
  • Plusieurs lignes de texte, telles que le texte dans un bloc HTML ou XML
  • Texte d’aide d’un script ou d’un document de fonction

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

Guillemets doubles :

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

Guillemets simples :

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

Remarque

Le dernier caractère de ligne fait partie de la marque fermante. Elle n’est pas ajoutée à la chaîne ici.

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

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

La sortie de cette commande est la suivante :

For help, type "get-help"

L’utilisation d’une chaîne ici 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 la suivante :

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

Dans les chaînes ici 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 la suivante :

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

Dans les chaînes ici 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 la suivante :

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 ici sont généralement utilisées pour affecter plusieurs lignes à une variable. Par exemple, la chaîne suivante affecte une page 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 ici 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.

Remarque

PowerShell permet aux chaînes doubles ou entre guillemets uniques d’étendre plusieurs lignes sans utiliser la @ syntaxe des chaînes ici. Toutefois, la syntaxe complète de chaîne ici est l’utilisation préférée.

Interprétation des 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înes des éléments. Un séparateur différent 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 d’un autre type sont converties en chaînes en appelant la ToString() méthode, ce qui peut ne pas donner de 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 de-DEsur . Lorsque la ToString() méthode convertit la valeur d’une $x chaîne, elle utilise une virgule (,) pour le séparateur décimal. En outre, la ToString() méthode convertit la date en chaîne au 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 transmettre à la commande externe. Cette interprétation supprime les guillemets externes.

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

Voir aussi