gpt4 book ai didi

powershell - $macro 替换 - ExpandString 限制

转载 作者:行者123 更新时间:2023-12-02 23:32:15 25 4
gpt4 key购买 nike

我正在尝试基于 this discussion 实现宏替换.基本上它有效,但似乎 ExpandString 有一些限制:

主要.ps1:

$foo = 'foo'
$text = [IO.File]::ReadAllText('in.config')
$ExecutionContext.InvokeCommand.ExpandString($text) | out-file 'out.config'

in.config(确定):
$foo

in.config(错误:“处理字符串标记时遇到行尾。”):
"

in.config(错误:“字符串末尾缺少 '。”):
'

该文件指出:

Return Value: The expanded string with all the variable and expression substitutions done.



什么是“表达式替换”(可能是我的情况)?

有什么解决方法吗?

最佳答案

发生错误是因为引号(单引号和双引号)是 PowerShell 运行时的特殊字符。它们表示一个字符串,如果它们仅用作该字符,则需要对其进行转义。

一种可能的解决方法是使用反引号转义引号,具体取决于您想要的结果。

例如,如果我的文本文件有

'$foo' 

该字符串的结果扩展将是
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
$foo

如果您想扩展该变量,则需要转义这些引号。
`'$foo`'
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
'foo'

或者,如果您要使用未配对的单引号或双引号,则需要将其转义。

您可以对字符串执行 -replace 以转义这些字符,但您必须确保这是全面的预期效果。
PS>$single, $double = "'", '"'    
PS>$text = [io.file]::ReadAllText('test.config') -replace "($single|$double)", '`$1'
PS>$ExecutionContext.InvokeCommand.ExpandString($text)

注意:在您执行 ExpandString 调用后,您将不再有反引号。

关于powershell - $macro 替换 - ExpandString 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686357/

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