即使子表达式是平衡的,Powershell 也会报告 MissingEndParenthesisInExpression

hun*_*ang 3 powershell

这是我的子表达式:

    """$((($l -split " """)[1] -split """ ")[0])"""
Run Code Online (Sandbox Code Playgroud)

我检查过,没有发现未配对的括号。然而,powershell 坚持说“在表达中缺少结束')'。” 有趣的是,表达式

    $((($l -split " """)[1] -split """ ")[0])
Run Code Online (Sandbox Code Playgroud)

工作正常。

有没有人有过类似的经历?这是Powershell的错误吗?

bri*_*ist 5

这.. 真的很有趣,是的,至少到目前为止,我认为这是一个错误。

这是一个更简单的重现:

"$("`"")"
"$("""")"
Run Code Online (Sandbox Code Playgroud)

这似乎是由在子表达式中、可扩展字符串中使用任一形式的双引号转义(反引号或双引号)引起的。

看来这是错误归结为解析器本身:

$sb = @'
"$("`"")"
'@

$tokens = $null
$er = $null

$ast = [System.Management.Automation.Language.Parser]::ParseInput($sb, [ref]$tokens, [ref]$er)

$ast.EndBlock.Statements[0].PipelineElements[0].Expression.NestedExpressions

$tokens[0].NestedTokens
Run Code Online (Sandbox Code Playgroud)

它找到的嵌套标记/表达式不正确。

我在 WLS 上使用 Windows PowerShell 5.1 和 PowerShell Core 6.0.0-rc.2 进行了测试。

相关问题