我是一个Powershell菜鸟,似乎一直被这种小怪异的行为所吸引。这是一些测试代码:
function EchoReturnTest(){
echo "afdsfadsf"
return "blah"
}
$variable = EchoReturnTest
echo ("var: " + $variable)
运行此脚本将其作为输出生成:“ var:afdsfadsf blah”
为什么函数不仅仅返回字符串“ blah”?
首先,PowerShell函数返回所有未捕获的“输出”。您可以通过分配变量来捕获输出,也可以通过重定向到$null
来忽略输出,例如:
$arrayList.Add("hi") > $null
这通常会输出类似0的值(添加了“ hi”的索引),但是因为我们重定向到$ null,所以忽略了输出。
第二,echo
只是“写入输出”的别名,它将相应的对象写入输出流。 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' }
。