有四种方法可以抑制输出:
$null
变量Out-Null
cmdlet [void]
类型$null
变量以下是所有四种情况的示例输出:
PS C:\> 1; $(2; return) > $null; 3
1
3
PS C:\> 1; $(2; return) | Out-Null; 3
1
2
PS C:\> 1; [void]$(2; return); 3
1
2
PS C:\> 1; $null = $(2; return); 3
1
2
预计所有四个案例都是等同的。
为什么重定向到$null
的行为有所不同?我遇到过一个错误吗?
更新
PS 2.0的另一个例子:
PS C:\> 1; $(Write-Output 2; Write-Host 3; return; Write-Host 4) > $null; 5
1
3
5
此示例显示PS 2.0中> $null
命令的意外行为。
return
命令就像从某个嵌套上下文中退出一样(虽然没有创建它的命令),停止$()
表达式执行然后继续执行(当它不应该执行时) )在Write-Output 5
命令的当前上下文中。
概要
(来自 wOxxOm 的答案)
> $null
操作在 $()
表达式之前执行并抑制其输出; return
命令不会退出当前上下文(被视为 BUG ),但会停止$()
表达式执行> $null
操作在 $()
表达式之前执行并抑制其输出; return
命令完全退出当前上下文| Out-Null
,[void]
,$null =
操作在 $()
表达式后执行,如果没有return
则禁止输出命令; return
命令完全退出当前上下文最后
抑制命令输出的不同方法:
... > $null
重定向到$null
变量... | Out-Null
管道到Out-Null
cmdlet [void]...
施放到[void]
类型$null = ...
分配给$null
变量