PowerShell:内联表达式中的双引号 [英] Powershell: Doubled double quotes in inline expressions
本文介绍了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屋!
查看全文