根据Powershell的“关于引用规则”:
此处的字符串是单引号或双引号的字符串,其中的引号是按字面意义解释的。
但是,以下字符串在Powershell版本5.0(内部版本10586,修订版117)中导致TerminatorExpectedAtEndOfString异常。在Powershell 2.0版中,它可以按预期工作:
$herestr=@"
'"'
"@
Write-Host $herestr
如果我用反引号(`)引用最后一个单引号,则here-string在2.0版和5.0版中均按预期工作。
$herestr=@"
'"`'
"@
Write-Host $herestr
为什么需要在here字符串中转义最后一个单引号?
我相信这是PowerShell解析器中的错误。看起来当它处于语句解析模式时,它首先尝试将第一件事解释为BareWord
字符串文字。如果失败,则会产生错误。您可以通过在等号前后放置多余的空间来解决此问题:
$herestr =@"
'"'
"@
或者
$herestr= @"
'"'
"@
或使用括号:
[void]($herestr=@"
'"'
"@)
请注意,由于括号不是赋值或增量/减量,因此它们会将表达式的结果写入流水线,这与裸分配表达式不同,因此您需要使用[void]
或任何其他方法来显式忽略它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句