代码之家  ›  专栏  ›  技术社区  ›  spilliton

在函数内部调用echo预挂起echo字符串以返回PowerShell中的值

  •  13
  • spilliton  · 技术社区  · 15 年前

    嘿,伙计们,我是个PowerShell的笨蛋,似乎总是被这种奇怪的行为所吸引。以下是一些测试代码:

     function EchoReturnTest(){
         echo "afdsfadsf"
         return "blah"
     }
    
     $variable = EchoReturnTest
     echo ("var: " + $variable)
    

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

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

    1 回复  |  直到 15 年前
        1
  •  22
  •   Keith Hill    15 年前

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

    如果您希望在主机控制台上“查看”一些信息,而不将其视为函数“输出”的一部分,则使用写主机,例如:

    function EchoReturnTest(){  
        Write-Host "afdsfadsf"  
        return "blah"
    }
    

    另外,如果您没有参数,那么您就不需要在函数名末尾使用parens,例如。 function EchoReturnTest { return 'blah' } .