根据 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]
或任何其他方法明确忽略它。