Powershell,有存储它的函数返回变量吗?

Powershell,有存储它的函数返回变量吗?

是否可以让函数返回存储它的变量的名称?

即 $a = myFunction

并且当在 shell 中将 $a 动态分配给该函数时,该函数是否知道它保存在 $a 中?

答案1

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

$a = test

输出

Called by:     $a = test

答案2

我认为这根本不可能,也没有多大意义。

这就像期望整数42知道它是否已存储在变量中一样$answer


一旦函数返回,只有它的返回值(如果有)才会存储在变量中(如果实际使用了赋值)。如果Get-Answer返回42并且您发出命令$answer = Get-Answer,则$answer确实会包含42,但不会保留任何记录表明它通过从函数返回而存储在那里;出于所有意图和目的,$answer = 42和的最终结果$answer = Get-Answer是相同的,如果Get-Answer确实返回42

此外,分配(如果有)仅发生函数返回;函数仅提供返回值(如果有的话);它不关心也不应该关心返回后 PowerShell 将如何处理该值;并且其返回值很可能被丢弃而不是分配给任何东西。 和 之间没有直接联系$answerGet-AnswerPowerShell 在面对如下命令时会执行的操作$answer = Get-Answer是:

  • 执行Get-Answer
  • 获取返回值Get-Answer
  • 将此值存储在$answer

所有玩家都不知道这个环节;函数不知道它的返回值将用于什么,变量也不知道它的赋值来自哪里。

即使有记录表明这项任务曾经发生过,它也肯定不会在Get-Answer执行期间发生。

答案3

根据您分享的最少信息,这是我能做出的最佳猜测。
我主要依据您所说的“将其他输出传递到另一个函数”

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

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

用法

$a = myFunction1
myFunction2 $a

请注意,函数内的 echo 或 write-hosts 命令也是返回值。使用 write-debug 获取调试信息,或者如果您确实需要“返回”的信息,则将其作为数组(或自定义对象)返回

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

相关内容