为什么我需要转义此 Powershell 字符串中的最后一个单引号?

为什么我需要转义此 Powershell 字符串中的最后一个单引号?

根据 Powershell“关于引用规则“:

此处字符串 (here-string) 是一个单引号或双引号字符串,其中引号按字面意思解释。

但是,以下字符串在 Powershell 版本 5.0(内部版本 10586,修订版 117)中会导致 TerminatorExpectedAtEndOfString 异常。在 Powershell 版本 2.0 中,它可以按预期工作:

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

如果我用反引号(`)引用最后一个单引号,则此处的字符串在 2.0 和 5.0 版本中均可按预期工作。

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

为什么我需要转义此处字符串中的最后一个单引号?

答案1

我认为这是 PowerShell 解析器的一个错误。看起来,当它处于语句解析模式时,它首先尝试将第一件事解释为BareWord字符串文字。如果失败,则会产生错误。您可以通过在等号之前或之后添加额外的空格来解决这个问题:

$herestr =@"
'"'
"@

或者

$herestr= @"
'"'
"@

或者使用括号:

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

请注意,由于括号不是赋值或递增/递减,它们会将表达式的结果写入管道,这与裸赋值表达式不同,因此您需要使用[void]或任何其他方法明确忽略它。

相关内容