¿Cuál es el carácter de escape literal en Powershell?

51

Al incluir un carácter de comillas literales dentro de una cadena entre comillas en Powershell, ¿cómo puedo escapar del carácter de comillas para indicar que es un literal en lugar de un delimitador de cadena?

David Alpert
fuente

Respuestas:

75

De help about_quoting_rules

Para que aparezcan comillas dobles en una cadena, encierre la cadena completa entre comillas simples. Por ejemplo:

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

El resultado de este comando es:

As they say, "live and learn."

También puede encerrar una cadena entre comillas simples en una cadena entre comillas dobles. Por ejemplo:

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

El resultado de este comando es:

As they say, 'live and learn.'

Para obligar a Windows PowerShell a interpretar una comilla doble literalmente, use un carácter de retroceso. Esto evita que Windows PowerShell interprete las comillas como un delimitador de cadena. Por ejemplo:

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

El resultado de este comando es:

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

Debido a que el contenido de las cadenas entre comillas simples se interpreta literalmente, no puede usar el carácter de retroceso para forzar una interpretación de caracteres literales en una cadena entre comillas simples.

El uso del carácter de retroceso para escapar de otras comillas en cadenas entre comillas simples no se admite en versiones recientes de PowerShell. En versiones anteriores de PowerShell, el carácter de escape de retroceso podría usarse para escapar de un carácter de comillas dobles dentro de una sola cadena entre comillas, como se detalla en el help about_quotingdocumento que está disponible en esas versiones de PowerShell.

Helvick
fuente
2
Solo una nota, pero parece que no puede escapar de comillas simples. Su último ejemplo no es válido. Tal vez algo ha cambiado desde tu publicación, ya que tampoco puedo encontrar esa about_quotingayuda. Ejecutando powershell v5.1. Escapar de comillas dobles o anidar diferentes tipos de comillas sigue funcionando como se esperaba.
Kal Zekdor
1
Interesante: parece que el soporte para escapar de comillas simples fue un error. El archivo de ayuda about_quoting ha sido reemplazado por about_quoting_rules y dice claramente que no se puede usar una tecla de retroceso para escapar de las comillas simples en PowerShell v5 porque las cadenas con comillas simples son literales. Buena captura, esto fue diferente en V3.
Helvick
1
Tenga en cuenta que las comillas simples se escapan al duplicarlas en cadenas de comillas simples, como en SQL. Por lo tanto , 'As they say, ''live and learn.'''salidas As they say, 'live and learn.', lo mismo que su segundo ejemplo.
brianary
13

El carácter de escape en Powershell es el "` "(apóstrofo / tumba hacia atrás).

Esto se puede usar para escapar de comillas y también caracteres especiales (por ejemplo, tab es `t).

Adam Brand
fuente
2
Esto probablemente enloquecerá a los bashusuarios. (El cmd.exepersonaje de escape es ^)
Grawity
2
Bueno, si entrecierras los ojos, entonces parece una barra invertida.
koenigdmj
10

Para complementar lo que ya se ha proporcionado aquí, también debe saber que puede escapar de una cotización (simple o doble) con la cotización misma. Eso significa que puedes hacer esto:

"Aquí hay un ejemplo de una" "cadena entre comillas dobles" "."

y esto:

'Esta vez es' 'comillas simples' ''.

La ventaja que proporciona esta sintaxis es simple: es más fácil escribir la misma cita dos veces que escapar de una cita con una tecla de retroceso.

Poshoholic
fuente
1

solo 'texto' para que se trate como texto literal, luego escape cualquier carácter especial usando "\"

por ejemplo, esta cadena: "Como dicen," vive y aprende "." Se convierte en esta cadena 'Como dicen, \ "vive y aprende".

dvdccd
fuente
1
No en PowerShell, no lo hace. PS C: \ WINDOWS \ system32> Write-Host 'Como dicen, \ "vive y aprende. \"' Como dicen, \ "vive y aprende."
HopelessN00b
1
@ HopelessN00b tal vez no juzguemos con demasiada dureza: esto funciona si está utilizando PowerShell.exe -Commande intentando pasar comillas dobles en el parámetro (ya que, técnicamente, es CMD el que se escapa, pero es válido en el parámetro de comando). imgur.com/1btjoQW
jparnell8839