San*_*ann 4 powershell echo powershell-ise
我开始学习(初学者)PowerShell 脚本。我发现echo两者Write-Host都可以在控制台屏幕上显示输出,那么它们之间有什么区别呢?我从 Stack Overflow 上读到了这个问题,但我无法理解它的答案。我想简单地了解其中的差异。
我将尝试从哲学上而不是技术上向您解释它。
Write-Host用于在控制台中显示信息。它不会被写入输出流echo,实际上是 的别名,Write-Output用于输出操作的对象考虑以下示例:
这段代码在这里:
$Results = 0..10 | ForEach-Object {
Write-Host "Current Number: $_"
$_
}
Run Code Online (Sandbox Code Playgroud)
将在控制台输出以下内容:
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
Run Code Online (Sandbox Code Playgroud)
如果你现在检查变量$Results,你可以看到:
PS C:\WINDOWS\system32> $Results
0
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
这些数字被保存到变量中,因为$_线上没有。3 被发送到输出流。Write-Host但是,它被发送到主机,因此它显示在控制台中,但不会显示在变量中,因为它不会在输出流中创建任何内容。
Write-Host如果我们更改为?:现在会发生什么Write-Output?
$Results = 0..10 | ForEach-Object {
Write-Output "Current Number: $_"
$_
}
Run Code Online (Sandbox Code Playgroud)
如果我们运行它,我们将不会在控制台中看到任何内容,因为整个输出流都保存在变量中$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
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,如果您想打印简单的信息,除了告诉您代码当前正在做什么之外,实际上没有其他用处,您可以使用Write-Host
如果你想向输出流输出任何内容,你可以使用Write-Output
但坚持住!还有更多。
你实际上并不需要Write-Output。我编写 PowerShell 脚本已经有大约 5、6 年了,但我一次都没有使用过它。为什么?因为写入输出流是 PowerShell 中的默认设置。如果您再次查看我们的示例,$_即使我没有使用 .online ,第三行总是神奇地进入输出流Write-Output。
总结一下:用于Write-Host在控制台中显示信息,我建议不要使用echo/Write-Output因为它是默认值。
| 归档时间: |
|
| 查看次数: |
5302 次 |
| 最近记录: |