PowerShell 嵌套此处字符串

Fit*_*roy 6 powershell escaping herestring

将以下内容放入脚本中将会失败:

$MyString = @'
hello
@'
'@
bye
'@

write-host $MyString
Run Code Online (Sandbox Code Playgroud)

返回的错误如下:

At C:\scripts\test.ps1:6 char:1
+ '@
+ ~~
The string is missing the terminator: '.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Run Code Online (Sandbox Code Playgroud)

在嵌套的@'and'@前面加上反引号(重音符号)确实可以用作转义字符,但它也被视为文字,因此出现在 的输出中$MyString

是否有正确的方法可以在不干扰输出的单引号此处字符串中转义单引号此处字符串?

注意:

我应该提到,外部此处字符串的内容是动态填充的,该内容由另一个程序作为命令行参数提供给 powershell 脚本。这没有反映在示例代码中,因为我不想用我非常具体且有些利基的实现来模糊问题。

外部此处字符串不太可能包含内部此处字符串(但有可能发生),因此我认为需要进行一些防御性编程来适应这种情况。

Ans*_*ers 4

使用双引号,无论是外部此处字符串:

$MyString = @"
hello
@'
'@
bye
"@
Run Code Online (Sandbox Code Playgroud)

或者对于内部此处字符串:

$MyString = @'
hello
@"
"@
bye
'@
Run Code Online (Sandbox Code Playgroud)