web-dev-qa-db-ja.com

Powershell、それを格納する関数return変数がありますか?

関数がそれを格納する変数の名前を返すようにすることは可能ですか?

つまり$ a = myFunction

$ aがシェルで動的に割り当てられたときに、関数が$ aに保持されていることを関数に認識させますか?

2
benignadmin
function test() {
    write-Host "Called by: $($MyInvocation.Line)"
}

$a = test

どの出力

Called by:     $a = test

2

これはまったく不可能だと思いますし、あまり意味がありません。

それは、整数42が変数$answerに格納されているかどうかを知ることを期待するようなものです。


関数が戻ると、その戻り値(存在する場合)のみが変数に格納されます(割り当てが実際に使用されている場合)。 Get-Answer42を返し、コマンド$answer = Get-Answerを発行した場合、$answerには実際に42が含まれますが、それがあったという事実の記録は保持されません。関数から返されることによってそこに格納されます。すべての意図と目的で、$answer = 42が実際に$answer = Get-Answerを返す場合、Get-Answer42の最終結果は同じです。

また、割り当て(存在する場合)は関数が返すだけです。関数は戻り値のみを提供します(提供する場合)。 PowerShellがこの値を返した後、PowerShellがこの値をどのように処理するかを気にする必要はありません。そして、その戻り値は、何かに割り当てられる代わりに、非常にうまく破棄される可能性があります。 $answerGet-Answerの間に直接のリンクはありません。$answer = Get-Answerのようなコマンドに直面したときにPowerShellが行うことは次のとおりです。

  • Get-Answerを実行します
  • Get-Answerからの戻り値を取得
  • この値を$answerに保存します

プレイヤーの誰もこのリンクの知識を持っていません。関数はその戻り値が何のために使用されるのかを知らず、変数は割り当てられた値がどこから来るのかを知りません。

そして、この割り当てがこれまでに発生したという記録が保持されていたとしても、Get-Answerがまだ実行されている間はまだ発生していなかったでしょう。

1
Massimo

あなたが共有した最小限の情報で、これは私が作ることができる最高の推測です。
「他の出力を別の関数に渡す」というあなたの声明を主に取り上げます

myFunction1 {
    ...code...
    return $someThing
}

myFunction2 {
    param ($param1)
    ...code...
}

使用法

$a = myFunction1
myFunction2 $a

関数内のechoまたはwrite-hostsコマンドも戻り値であることに注意してください。デバッグ情報にはwrite-debugを使用します。または、その情報が本当に必要な場合は、「返される」戻り値は配列(またはカスタムオブジェクト)として返されます。

return @($var1, $va2, $var3)
0
Clayton