首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$macro替代- ExpandString限制

$macro替代- ExpandString限制
EN

Stack Overflow用户
提问于 2009-03-26 15:49:40
回答 1查看 2.4K关注 0票数 2

我正在尝试实现基于这一讨论的宏替换。基本上,这是可行的,但ExpandString似乎有一些限制:

main.ps1:

代码语言:javascript
复制
$foo = 'foo'
$text = [IO.File]::ReadAllText('in.config')
$ExecutionContext.InvokeCommand.ExpandString($text) | out-file 'out.config'

in.config (确定):

代码语言:javascript
复制
$foo

in.config (错误:“处理字符串令牌时遇到行尾”):

代码语言:javascript
复制
"

in.config (错误:字符串末尾的“缺失”):

代码语言:javascript
复制
'

这些文件指出:

返回值:使用所有变量和表达式替换完成的扩展字符串。

什么是“表达式替代”(也许这就是我的情况)?

有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-26 17:42:21

出现此错误是因为引号(单引号和双引号)是PowerShell运行时的特殊字符。它们表示字符串,如果要将它们用作该字符,则需要转义。

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

例如,如果我的文本文件

代码语言:javascript
复制
'$foo' 

该字符串的结果扩展将是

代码语言:javascript
复制
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
$foo

如果您希望展开该变量,则需要转义这些引号。

代码语言:javascript
复制
`'$foo`'
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
'foo'

或者,如果您要有一个未配对的单引号或双引号,您将需要摆脱它。

您可以在字符串上执行一个-replace来转义这些字符,但您必须确保这是所有需要的效果。

代码语言:javascript
复制
PS>$single, $double = "'", '"'    
PS>$text = [io.file]::ReadAllText('test.config') -replace "($single|$double)", '`$1'
PS>$ExecutionContext.InvokeCommand.ExpandString($text)

注意:在执行ExpandString调用之后,就不会再有后排了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/686357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档