17

私はPowershellの初心者で、このようなちょっと変わった行動に巻き込まれ続けているようです。ここにいくつかのテストコードがあります:

 function EchoReturnTest(){
     echo "afdsfadsf"
     return "blah"
 }

 $variable = EchoReturnTest
 echo ("var: " + $variable)

このスクリプトを実行すると、これが出力として生成されます: "var:afdsfadsf blah"

関数が文字列「blah」を返すだけではないのはなぜですか?

4

1 に答える 1

31

まず、PowerShell関数は、キャプチャされていないすべての「出力」を返します。変数に割り当てることで出力をキャプチャでき、$nullたとえば次のようにリダイレクトすることで出力を無視できます。

$arrayList.Add("hi") > $null

これは通常、0( "hi"が追加されたインデックス)のようなものを出力しますが、$ nullにリダイレクトしたため、出力は無視されます。

2つ目echoは、対応するオブジェクトを出力ストリームに書き込む「Write-Output」の単なるエイリアスです。 return "blah"これは、次と同等の便利な機能です。

Write-Output "blah"
return

したがって、関数の実装はこれと同等です。

function EchoReturnTest(){  
    Write-Output "afdsfadsf"  
    Write-Output "blah"
    return
}  

関数の「出力」の一部と見なされずにホストコンソールで情報を「表示」したい場合は、Write-Hostを使用します。例:

function EchoReturnTest(){  
    Write-Host "afdsfadsf"  
    return "blah"
}

また、パラメータがない場合は、関数名の最後にあるparensは必要ありませんfunction EchoReturnTest { return 'blah' }

于 2010-01-28T23:49:08.710 に答える