Qual é o caractere de escape literal no Powershell?

51

Ao incluir um caractere de citação literal dentro de uma seqüência de caracteres citada no Powershell, como faço para escapar do caractere de citação para indicar que é um literal, em vez de um delímetro de seqüência de caracteres?

David Alpert
fonte

Respostas:

75

De help about_quoting_rules

Para fazer aspas duplas aparecerem em uma seqüência, coloque a seqüência inteira entre aspas simples. Por exemplo:

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

A saída deste comando é:

As they say, "live and learn."

Você também pode colocar uma sequência de aspas simples em uma sequência de aspas duplas. Por exemplo:

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

A saída deste comando é:

As they say, 'live and learn.'

Para forçar o Windows PowerShell a interpretar aspas duplas literalmente, use um caractere de bastão. Isso impede que o Windows PowerShell interprete as aspas como um delimitador de seqüência de caracteres. Por exemplo:

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

A saída deste comando é:

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

Como o conteúdo de cadeias de caracteres entre aspas simples é interpretado literalmente, não é possível usar o caractere backtick para forçar uma interpretação literal de caracteres em uma cadeia de caracteres entre aspas simples.

O uso do caractere backtick para escapar de outras aspas em seqüências de caracteres entre aspas simples não é suportado nas versões recentes do PowerShell. Nas versões anteriores do PowerShell, o caractere de escape do backtick poderia ser usado para escapar de um caractere de aspas duplas em uma única cadeia de caracteres entre aspas, conforme detalhado no help about_quotingdocumento disponível nessas versões do PowerShell.

Helvick
fonte
2
Apenas uma observação, mas parece que você não pode escapar de aspas simples. Seu último exemplo não é válido. Talvez algo tenha mudado desde a sua postagem, pois também não consigo encontrar essa about_quotingajuda. Executando o powershell v5.1. Escolher aspas duplas ou aninhar diferentes tipos de aspas ainda funciona conforme o esperado.
Kal Zekdor
11
Interessante - parece que o suporte para escapar aspas simples foi um bug. O arquivo de ajuda about_quoting foi substituído por about_quoting_rules e diz claramente que você não pode usar um backtick para escapar de aspas simples no PowerShell v5 porque as seqüências de caracteres entre aspas simples são literais. Boa captura, isso foi diferente na V3.
Helvick # 06
11
Observe que as aspas simples são escapadas dobrando-as em cadeias de caracteres simples, como no SQL. Assim , 'As they say, ''live and learn.'''produz As they say, 'live and learn.'o mesmo que o seu segundo exemplo.
Brianary
13

O caractere de escape no Powershell é o "` "(apóstrofo / sepultura ao contrário).

Isso pode ser usado para escapar de aspas e também de caracteres especiais (por exemplo, tab é `t).

Adam Brand
fonte
2
Isso provavelmente deixará os bashusuários loucos. (O cmd.execaractere de escape é ^)
grawity
2
Bem, se você apertar os olhos, isso meio que parece uma barra invertida.
31909 koenigdmj
10

Para complementar o que já foi fornecido aqui, você também deve saber que pode escapar de uma cotação (simples ou dupla) com a própria cotação. Isso significa que você pode fazer isso:

"Aqui está um exemplo de uma" "string de aspas duplas" "."

e isto:

'Desta vez é' 'aspas simples' '.'

A vantagem que essa sintaxe oferece é simples: é mais fácil digitar a mesma cotação duas vezes do que escapar de uma cotação com um backtick.

Poshoholic
fonte
1

'texto' único, para que seja tratado como texto literal, e escape de qualquer caractere especial usando "\"

por exemplo: Esta string: "Como se costuma dizer," viva e aprenda "." Torna-se essa string 'Como se costuma dizer, "viva e aprenda."

dvdccd
fonte
11
Não no PowerShell, não. PS C: ' "vivo e aprender \" Como se costuma dizer, \' "vivo e aprender \" \ WINDOWS \ system32> Write-Host Como se costuma dizer, \
HopelessN00b
11
@ HopelessN00b talvez não julguemos muito severamente - isso funciona se você estiver usando PowerShell.exe -Commande tentando passar aspas duplas no parâmetro (como, tecnicamente, o CMD está escapando, mas é válido no parâmetro de comando). imgur.com/1btjoQW
jparnell8839