我开始学习(初学者)PowerShell脚本。我发现echo
和Write-Host
都可以在控制台屏幕上显示输出,那么它们之间有什么区别?我读到这个问题来自 Stack Overflow,但我无法理解它的答案。我想用简单的术语了解它们之间的区别。
答案1
我将尝试从哲学而非技术的角度向您解释这一点。
Write-Host
用于在控制台中显示信息。它不会写入输出流echo
,实际上是 的别名,Write-Output
用于输出操作的对象
请考虑以下示例:
此处的代码:
$Results = 0..10 | ForEach-Object {
Write-Host "Current Number: $_"
$_
}
将会在控制台输出以下内容:
Current Number: 0
Current Number: 1
Current Number: 2
Current Number: 3
Current Number: 4
Current Number: 5
Current Number: 6
Current Number: 7
Current Number: 8
Current Number: 9
Current Number: 10
如果你现在检查变量$Results
,你会看到:
PS C:\WINDOWS\system32> $Results
0
1
2
3
4
5
6
7
8
9
10
这些数字被保存到变量中,因为$_
第 3 行被发送到输出流。Write-Host
但是,被发送到主机,因此它显示在控制台中,但不显示在变量中,因为它在输出流中没有创建任何内容。
Write-Host
如果我们改为Write-Output
?,会发生什么情况:
$Results = 0..10 | ForEach-Object {
Write-Output "Current Number: $_"
$_
}
如果我们运行这个,我们将不会在控制台中看到任何内容,因为整个输出流都保存在$Results
变量中。如果我们现在检查这个变量,它看起来是这样的:
PS C:\WINDOWS\system32> $Results
Current Number: 0
0
Current Number: 1
1
Current Number: 2
2
Current Number: 3
3
Current Number: 4
4
Current Number: 5
5
Current Number: 6
6
Current Number: 7
7
Current Number: 8
8
Current Number: 9
9
Current Number: 10
10
因此,如您所见,如果您想打印简单的信息,而这些信息除了通知您代码当前正在做什么之外,实际上没有其他用处,您可以使用Write-Host
如果你想输出任何东西到输出流,你可以使用Write-Output
但请稍等!还有更多。
实际上你并不需要Write-Output
。我编写 PowerShell 脚本已有大约 5、6 年了,但从未使用过它。为什么?因为写入输出流是 PowerShell 中的默认设置。如果你再次查看我们的示例,第三行$_
总是神奇地进入输出流,即使我没有使用Write-Output
。
总结一下:用来Write-Host
在控制台中显示信息,我建议不要使用echo
/,Write-Output
因为它是默认的。
答案2
正如所说,Write-Output
AKAecho
输出对象
将指定的对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令,则对象将显示在控制台中。
因此,如果您在屏幕上看到一些文本,那只是因为您的命令是管道中的最后一个。但每个对象都打印在单独的行上,因此您可以轻松看到的最大区别是它echo
不会在同一行中打印其参数
PS C:\用户>echo 这是一个字符串 这 是 A 细绳 PS C:\用户>Write-Host 这是一个字符串 这是一个字符串