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 の関数は、コマンドレットやネイティブ コマンドと同じ引数規則に従います。つまり、引数はスペースで区切られます (もちろん、これは、その解析モードで自動的に文字列として解釈されるため、引数を引用符で囲む必要がないことも意味します) ):

'test' | replace test foo

したがって、かっこ内に引数を指定して PowerShell 関数またはコマンドレットを呼び出すと、関数内の配列である単一の引数が取得されます。オブジェクトでのメソッドの呼び出しは、他の規則に従います (C# とほぼ同じように見えます)。

少し詳しく説明すると、PowerShell には、行を解析する 2 つの異なるモードがあります。式モードコマンド モードです。式モードでは、PowerShell は REPL のように動作します。入力1+1して2戻るか、入力'foo' -replace 'o'して戻ることができfます。コマンド モードは、シェルの動作を模倣するためのものです。それは、コマンドを実行したいときGet-ChildItemです& '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 に答える