在函数内调用Echo会使回显字符串在Powershell中返回值

时间:2010-01-28 23:27:15

标签: powershell function string echo

嘿伙计们,我是一个Powershell noob,似乎一直在抓住像这样的奇怪行为。这是一些测试代码:

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

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

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

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

1 个答案:

答案 0 :(得分:22)

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

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