Quel est le personnage d'évasion littéral dans Powershell?


51

Lors de l'inclusion d'un caractère de citation littéral à l'intérieur d'une chaîne citée dans Powershell, comment puis-je échapper au caractère de citation pour indiquer qu'il s'agit d'un littéral au lieu d'un séparateur de chaîne?

Réponses:


75

De help about_quoting_rules

Pour que les guillemets doubles apparaissent dans une chaîne, placez la chaîne entière entre guillemets simples. Par exemple:

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

Le résultat de cette commande est:

As they say, "live and learn."

Vous pouvez également inclure une chaîne entre guillemets dans une chaîne entre guillemets. Par exemple:

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

Le résultat de cette commande est:

As they say, 'live and learn.'

Pour forcer Windows PowerShell à interpréter littéralement un guillemet double, utilisez un caractère de type point de repère. Cela empêche Windows PowerShell d'interpréter le guillemet comme un délimiteur de chaîne. Par exemple:

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

Le résultat de cette commande est:

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

Étant donné que le contenu des chaînes entre guillemets est interprété littéralement, vous ne pouvez pas utiliser le caractère backtick pour forcer une interprétation de caractère littéral dans une chaîne entre guillemets.

L'utilisation du caractère en forme de coche pour échapper aux autres guillemets dans des chaînes entre guillemets n'est pas prise en charge dans les versions récentes de PowerShell. Dans les versions antérieures de PowerShell, le caractère d'échappement backtick pouvait être utilisé pour échapper à un double guillemet dans une chaîne entre guillemets, comme indiqué dans le help about_quotingdocument disponible dans ces versions de PowerShell.


2
Juste une note, mais il semble que vous ne puissiez pas échapper aux guillemets simples. Votre dernier exemple n'est pas valide. Peut-être que quelque chose a changé depuis votre publication, car je ne trouve pas cette about_quotingaide non plus. Lancer Powershell v5.1. Échapper aux guillemets ou imbriquer différents types de guillemets fonctionne toujours comme prévu.
Kal Zekdor

1
Intéressant - il semblerait que le support pour échapper aux guillemets simples était un bogue. Le fichier d'aide about_quoting a été remplacé par about_quoting_rules et indique clairement que vous ne pouvez pas utiliser un backtick pour échapper aux guillemets simples dans PowerShell v5 car les chaînes entre guillemets sont des littéraux. Bonne prise, c'était différent dans V3.
Helvick

1
Notez que les guillemets simples sont échappés en les doublant en chaînes simples, comme en SQL. Ainsi , les 'As they say, ''live and learn.'''résultats As they say, 'live and learn.', les mêmes que votre deuxième exemple.
brianary

13

Le personnage d'échappement dans Powershell est le "` "(apostrophe / tombe en arrière).

Ceci peut être utilisé pour échapper des guillemets et des caractères spéciaux (par exemple, tab est `t).


2
Cela va probablement rendre les bashutilisateurs fous. (Le cmd.exepersonnage d'évasion est ^)
grawity

2
Eh bien, si vous louchez, cela ressemble à une barre oblique inverse.
koenigdmj le

10

Pour compléter ce qui a déjà été fourni ici, vous devez également savoir que vous pouvez échapper à un devis (simple ou double) avec le devis lui-même. Cela signifie que vous pouvez faire ceci:

"Voici un exemple de" "chaîne entre guillemets" "."

et ça:

"Cette fois, c'est" "une seule citation". "

L'avantage de cette syntaxe est simple: il est plus facile de taper deux fois la même citation que d'échapper à une citation avec un backtick.


1

un 'texte' unique pour qu'il soit traité comme un texte littéral, puis échappez à tout caractère spécial en utilisant "\"

Par exemple, cette chaîne: "comme on dit," vivre et apprendre "" devient cette chaîne "comme on dit, \" vivre et apprendre. "


1
Pas dans PowerShell, ce n'est pas le cas. PS C: \ WINDOWS \ system32> Write-Host 'Comme on dit, \ "vit et apprend. \"' Comme on dit, \ "vit et apprend. \"
HopelessN00b Le

1
@ HopelessN00b peut-être ne jugeons pas trop sévèrement - cela fonctionne si vous utilisez PowerShell.exe -Commandet essayez de passer des guillemets doubles dans le paramètre (car, techniquement, c'est CMD qui y échappe, mais qui est valide dans le paramètre de commande). imgur.com/1btjoQW
jparnell8839
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.