在函数内部调用Echo会将回显字符串附加在Powershell中以返回值

问题描述 投票:15回答:1

我是一个Powershell菜鸟,似乎一直被这种小怪异的行为所吸引。这是一些测试代码:

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

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

运行此脚本将其作为输出生成:“ var:afdsfadsf blah”

为什么函数不仅仅返回字符串“ blah”?

powershell function string echo
1个回答
24
投票

首先,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' }

© www.soinside.com 2019 - 2024. All rights reserved.