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

spi*_*ton 15 string powershell function echo

嘿伙计们,我是一个Powershell noob,似乎不断陷入这样的奇怪行为.这是一些测试代码:

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

 $variable = EchoReturnTest
 echo ("var: " + $variable)
Run Code Online (Sandbox Code Playgroud)

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

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

Kei*_*ill 24

首先,PowerShell函数返回所有未捕获的"输出".您可以通过分配变量来捕获输出,并且可以通过重定向到$null例如以下来忽略输出:

$arrayList.Add("hi") > $null
Run Code Online (Sandbox Code Playgroud)

这通常会输出类似于0的内容(添加"hi"的索引),但由于我们重定向到$ null,因此忽略输出.

其次,echo它只是"Write-Output"的别名,它将相应的对象写入输出流. return "blah"只是一个方便,相当于:

Write-Output "blah"
return
Run Code Online (Sandbox Code Playgroud)

所以你的函数实现等同于:

function EchoReturnTest(){  
    Write-Output "afdsfadsf"  
    Write-Output "blah"
    return
}  
Run Code Online (Sandbox Code Playgroud)

如果你想在主机控制台上"看到"某些信息而不将其视为功能"输出"的一部分,那么使用Write-Host,例如:

function EchoReturnTest(){  
    Write-Host "afdsfadsf"  
    return "blah"
}
Run Code Online (Sandbox Code Playgroud)

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

  • 有没有办法覆盖行为,所以不会返回未捕获的值?例如,如果我想具体说明函数中发生的任何事情,只返回一个特定的值? (2认同)