Was ist der buchstäbliche Fluchtcharakter in Powershell?

51

Wie kann ich das Anführungszeichen beim Einfügen eines literalen Anführungszeichens in eine in Anführungszeichen gesetzte Zeichenfolge in Powershell maskieren, um anzuzeigen, dass es sich um ein Literal anstelle eines Zeichenfolgendelimeters handelt?

David Alpert
quelle

Antworten:

75

Von help about_quoting_rules

Um doppelte Anführungszeichen in einer Zeichenfolge anzuzeigen, schließen Sie die gesamte Zeichenfolge in einfache Anführungszeichen ein. Zum Beispiel:

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

Die Ausgabe dieses Befehls lautet:

As they say, "live and learn."

Sie können auch eine Zeichenfolge mit einfachen Anführungszeichen in eine Zeichenfolge mit doppelten Anführungszeichen einschließen. Zum Beispiel:

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

Die Ausgabe dieses Befehls lautet:

As they say, 'live and learn.'

Verwenden Sie ein Backtick-Zeichen, um Windows PowerShell zu zwingen, ein doppeltes Anführungszeichen wörtlich zu interpretieren. Dadurch wird verhindert, dass Windows PowerShell das Anführungszeichen als Zeichenfolgenbegrenzer interpretiert. Zum Beispiel:

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

Die Ausgabe dieses Befehls lautet:

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

Da der Inhalt von Zeichenfolgen in Anführungszeichen wörtlich interpretiert wird, können Sie das Backtick-Zeichen nicht verwenden, um eine wörtliche Zeicheninterpretation in einer Zeichenfolge in Anführungszeichen zu erzwingen.

Die Verwendung des Backtick-Zeichens, um andere Anführungszeichen in Zeichenfolgen in einfachen Anführungszeichen zu umgehen, wird in neueren Versionen von PowerShell nicht unterstützt. In früheren Versionen von PowerShell konnte das Escape-Zeichen für das Zurücksetzen verwendet werden, um ein doppeltes Anführungszeichen in einer Zeichenfolge in einfachen Anführungszeichen zu ersetzen, wie im help about_quotingDokument beschrieben, das in diesen Versionen von PowerShell verfügbar ist.

Helvick
quelle
2
Nur eine Notiz, aber es sieht so aus, als ob Sie sich nicht vor einfachen Anführungszeichen schützen können. Ihr letztes Beispiel ist ungültig. Vielleicht hat sich seit Ihrem Post etwas geändert, da ich diese about_quotingHilfe auch nicht finde . Ausführen von Powershell v5.1. Es funktioniert weiterhin wie erwartet, doppelte Anführungszeichen zu umgehen oder verschiedene Arten von Anführungszeichen zu verschachteln.
Kal Zekdor
1
Interessant - es scheint, dass die Unterstützung für das Entkommen von einfachen Anführungszeichen ein Fehler war. Die Hilfedatei "about_quoting" wurde durch "about_quoting_rules" ersetzt und es wird klargestellt, dass Sie kein Backtick verwenden können, um einfache Anführungszeichen in PowerShell v5 zu umgehen, da Zeichenfolgen in einfachen Anführungszeichen Literale sind. Guter Fang, das war in V3 anders.
Helvick
1
Beachten Sie, dass einfache Anführungszeichen durch Verdoppeln in einfachen Anführungszeichen wie in SQL maskiert werden. Also 'As they say, ''live and learn.'''Ausgänge As they say, 'live and learn.', genau wie im zweiten Beispiel.
Brianary
13

Das Fluchtzeichen in Powershell ist das "` "(rückwärtiges Apostroph / Grab).

Dies kann verwendet werden, um Anführungszeichen und auch Sonderzeichen zu maskieren (zB Tabulator ist `t).

Adam Brand
quelle
2
Dies wird wahrscheinlich bashBenutzer verrückt machen. (Der cmd.exeEscape-Charakter ist ^)
Grawity
2
Nun, wenn Sie blinzeln, dann sieht es wie ein Backslash aus.
Koenigdmj
10

Um das zu ergänzen, was hier bereits bereitgestellt wurde, sollten Sie auch wissen, dass Sie ein Zitat (einfach oder doppelt) mit dem Zitat selbst umgehen können. Das heißt, Sie können dies tun:

Msgstr "" "Hier ist ein Beispiel für eine Zeichenfolge mit doppelten Anführungszeichen."

und das:

'Diesmal ist es' 'single-quoted' '.'

Der Vorteil dieser Syntax ist einfach: Es ist einfacher, dasselbe Zitat zweimal einzugeben, als ein Zitat mit einem Backtick zu umgehen.

Poshoholic
quelle
1

einzelner 'Text', so dass er als wörtlicher Text behandelt wird, und dann alle Sonderzeichen mit "\" maskieren

zB Diese Zeichenfolge: "Wie sie sagen," leben und lernen "." Wird diese Zeichenfolge "Wie sie sagen," leben und lernen ".

dvdccd
quelle
1
Nicht in PowerShell. PS C: \ WINDOWS \ system32> Write-Host 'Wie sie sagen, \ "leben und lernen. \"' Wie sie sagen, \ "leben und lernen. \"
HopelessN00b
1
@ HopelessN00b Lassen Sie uns vielleicht nicht zu scharf urteilen - dies funktioniert, wenn Sie PowerShell.exe -Commanddoppelte Anführungszeichen im Parameter verwenden und versuchen (technisch gesehen ist es CMD, das es maskiert, aber im Befehlsparameter gültig ist). imgur.com/1btjoQW
jparnell8839