在脚本中放置以下内容将失败:
$MyString = @'
hello
@'
'@
bye
'@
write-host $MyString
返回的错误如下:
At C:\scripts\test.ps1:6 char:1
+ '@
+ ~~
The string is missing the terminator: '.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
用反引号(重音)为嵌套前缀@'
和前缀'@
确实用作转义字符,但它也被视为文字,因此出现在$MyString
.
是否有正确的方法可以在不干扰输出的单引号此处字符串中转义单引号此处字符串?
注意:
我应该提到外部here-string的内容是动态填充的,该内容由另一个程序作为命令行参数提供给powershell脚本。这没有反映在示例代码中,因为我不想用我非常具体和有点小众的实现来混淆这个问题。
外部的 here-string 不太可能包含内部的 here-string(但它可能会发生),因此我觉得有必要进行一些防御性编程以适应这种情况。