2

一个简单的例子,我不知道如何让它工作......

 function replace($rep, $by){ 
    Process { $_ -replace $rep, $by }
}

当我做

"test" | replace("test", "foo")

结果是

test

当我做

 function replace(){ 
    Process { $_ -replace "test", "foo" }
}

"test" | replace()

结果是

foo

任何的想法 ?

4

2 回答 2

3

PowerShell 中的函数遵循与 cmdlet 和本机命令相同的参数规则,即参数由空格分隔(是的,这也意味着您不需要引用参数,因为在该解析模式下它们会自动解释为字符串):

'test' | replace test foo

因此,如果您使用括号中的参数调用 PowerShell 函数或 cmdlet,您将获得一个参数,该参数是函数中的一个数组。对象上的方法调用遵循其他规则(大致类似于 C# 中的规则)。

详细说明一下:PowerShell 有两种不同的模式来解析一行:表达式模式命令模式。在表达式模式下,PowerShell 的行为类似于 REPL。您可以键入1+12返回,或键入'foo' -replace 'o'f返回。命令模式用于模仿 shell 的行为。那是您想要运行命令的时候,例如Get-ChildItemor & 'C:\Program Files\Foo\foo.exe' bar blah。在括号内模式确定重新开始,这就是为什么Write-Host (Get-ChildItem)不同于Write-Host Get-ChildItem.

于 2012-04-25T07:52:51.330 回答
0

删除函数调用中的 () 并删除逗号

"test" | replace "test" "foo"
于 2012-04-25T07:50:30.740 回答