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,所以输出被忽略。

其次,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"
}

此外,如果您没有参数,那么您不需要函数名称末尾的括号,例如function EchoReturnTest { return 'blah' }.

于 2010-01-28T23:49:08.710 回答