1

私はPowerShellスクリプトの中でどのように機能が忙しい仕事を大幅に減らすことができて大変魅力的です。しかし、私は今Powershell文字列( '+'記号を使って連結文字列の一部として)内に宣言された関数を呼び出す際に問題を抱えています。いくつかのサンプルコード:Powershellの関数 - 文字列内で呼び出すことはできますか?

#this function takes input and either returns the input as the value, or returns 
placeholder text as the value 

function val ($valinput) 
{ if ($valinput) 
    {return $valinput} 
    else 
    {$valinput = "No Results!"; return $valinput} 
} 

私は行の先頭で、またはそれ自体で関数を呼び出す場合:

val("yo!") 

それは罰金実行されます。私は、例えば、文字列の一部としてそれを連結しようとすると、しかし:

"The results of the tests are: " + val($results) 

PowerShellは、そこの機能を実行する問題を抱えているようだ、と私はあなたが右の値式を提供しなければならない」を取得 の '+'演算子です。'予期しないトークン' val 'in式または 文'エラー。

連結された文字列内の関数を適切に呼び出す方法はありますか?私は、関数の結果を別の変数にプッシュし、結果の変数を文字列の一部として連結することができますが、この関数を呼び出すたびにそれを行うのは面倒です。前もって感謝します...!

+0

は私が古いトリックに出くわしているかもしれないと思う: 「テストの結果は次のとおりです。」+ $(ヴァル($結果)) と思われます。私はこれを開いて、これを行う方法であることを確認します。 – KTM

答えて

6

拡張文字列内の部分式にコマンド/関数呼び出しをラップ:また

"The results of the test are: $(val "yo!")" 

指摘しておき、PowerShellのコマンド呼び出しの構文は、括弧を必要としません。

function val ($inputOne,$inputTwo) 
{ 
    "One: $inputOne" 
    "Two: $inputTwo" 
} 

、構文様C#を使用して、あなたがしたい:あなたは完全に例で行うように私はあなたが連続した引数が一つとして扱われている状況で終わるだろうから、括弧を使用して落胆します:

val("first","second") 

が、出力になることを見つける:

One: first second 
Two: 

PowerShellのパーサーは、ネストされた式("first","second")を見て、単一の引数として扱いますので。

位置パラメータ引数の正しい構文は次のようになります。

val "first" "second" 
+1

Powershellの関数と関数(Javaなど)の呼び出し構文の違いについての重要な点です。私たちの多くは括弧で育ったので、無意識のうちに彼らの中に漂っていることがわかります。 –

+0

Powershellと.net関数の組み合わせを使用しても、何を使用するかを知るのに役立つものではありません。それはもう何度も私を襲ったので、もう面白くない。 *(おそらく私はマニュアルを読むべきです)* –

+0

@WalterMittyおそらく、PowerShellをシェル(bash、CMDなど)のように思えばもっと簡単になります。)以下をプログラミング言語として使用します。 –

関連する問題