Por que eu preciso escapar da última cota simples neste Powershell here-string?

1

De acordo com o Powershell " sobre as regras de cotação ":

A here-string is a single-quoted or double-quoted string in which quotation marks are interpreted literally.

No entanto, a seguinte string here resulta em uma exceção TerminatorExpectedAtEndOfString na versão 5.0 do Powershell (compilação 10586, revisão 117). Em uma versão 2.0 do Powershell, funciona como esperado:

$herestr=@"
'"'
"@
Write-Host $herestr

Se eu citar a última cota simples com um backtick ('), a string here funciona como esperado nas versões 2.0 e 5.0.

$herestr=@"
'"''
"@
Write-Host $herestr

Por que preciso escapar da última cota simples em uma string here?

    
por Bram 22.11.2016 / 15:14

1 resposta

1

Eu acredito que é um bug no analisador do PowerShell. Parece que quando está no modo de análise, tenta primeiro interpretar a primeira coisa como BareWord string literal. E se falhar, produzirá erro. Você pode solucionar isso colocando espaço extra antes ou depois do sinal de igual:

$herestr =@"
'"'
"@

ou

$herestr= @"
'"'
"@

Ou usando parênteses:

[void]($herestr=@"
'"'
"@)

Note que, como parêntese não é atribuição ou incremento / decremento, eles escreverão o resultado da expressão no pipeline, ao contrário da expressão de atribuição nua, então você precisa explicitamente ignorá-lo com [void] ou qualquer outro método. em>

    
por 25.11.2016 / 23:00