gpt4 book ai didi

Powershell:内联表达式中的双引号

转载 作者:行者123 更新时间:2023-12-03 00:02:06 24 4
gpt4 key购买 nike

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

"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

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

我在这里想念什么吗?

最佳答案

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

来自 PowerShell 3.0 Language Specification 中关于字符串文字的第 2.3.5.2 节,可扩展字符串文字明确拒绝 $(序列,以便进行子表达式解析。

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

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

关于Powershell:内联表达式中的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24242338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com