PowerShell:内联表达式中的双引号 [英] Powershell: Doubled double quotes in inline expressions

查看:31
本文介绍了PowerShell:内联表达式中的双引号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请谁给我解释一下为什么会发生以下情况:

"Fancy string - Hor""ray"
# outputs correctly (only one double quote): Fancy string - Hor"ray

'Hor"ray'.Replace('"', '""')
# outputs correctly (two double quotes): Hor""ray

"Fancy string - $('Hor"ray'.Replace('"', '"'+'"'))"
#outputs correctly (two double quotes): Hor""ray

"Fancy string - $('Hor"ray'.Replace('"', '""'))"
# outputs INCORRECTLY (only one double quote): Fancy string - Hor"ray

在我看来,开发人员会直观地预期,在"$(内联表达式)"中,PowerShell会将文本视为语句,并且不会干扰Replace('"', '""')将其转换为'"'的最后一个参数(除非语句解释器决定这样做)。

我是不是错过了什么?

推荐答案

这似乎是PowerShell分析可扩展字符串文字的错误。

PowerShell 3.0 Language Specification中,可扩展字符串文字显式拒绝$(序列,因此将转而进行子表达式分析。

因此,无论$('""')是否恰好嵌入到字符串文字中,期望$('""')一致解析似乎是合理的。显然,子表达式是单独解析的,因为它们支持在可扩展字符串中本身是非法的值(例如,您可以编写"$('"')""$('`""')",其中" '"' "" '`""' "将失败)。

但是,对于$('""')"$('""')",比较[Management.Automation.Language.Parser]::ParseInput的AST,我们得到两个不同的结果。两者都有一个StringConstantExpressionAst元素,Extent'""',但独立子表达式的Value"",而嵌入子表达式的Value"

这篇关于PowerShell:内联表达式中的双引号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆