powershell - 在函数内调用 Echo 会预先挂起 echo 字符串以在 Powershell 中返回值

标签 powershell function string echo

我是一个 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只是“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"
}

此外,如果您没有参数,则不需要函数名称末尾的括号,例如function EchoReturnTest { return 'blah' } .

关于powershell - 在函数内调用 Echo 会预先挂起 echo 字符串以在 Powershell 中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158786/

相关文章:

powershell - 将包含美元符号的字符串传递给 -Replace 变量

regex - EDI 的 Powershell 正则表达式模式

c# - 为什么 Powershell 没有看到它已经加载了这个程序集?

JavaScript - 使用 Document Write 输出一行

javascript - 关于 eval() 函数的帮助

javascript - 从 javascript 正确添加到 json

string - 从其子序列的集合构建最短的字符串

TFS Power Tools 2008 Powershell Snapin 无法在 Windows 2008 R2 的 64 位系统中运行

c - 将数组作为参数传递给 C 中的函数指针

java - 替换 token 中的所有内容,字母字符和句点除外