有四种抑制输出的方法:
$null
变量PS C:\> 1; $(2; return) > $null; 3
1
3
Out-Null
cmdlet配管PS C:\> 1; $(2; return) | Out-Null; 3
1
2
[void]
类型PS C:\> 1; [void]$(2; return); 3
1
2
$null
变量PS C:\> 1; $null = $(2; return); 3
1
2
预计这四种情况都是相同的。
为什么重定向到$null
的行为有所不同?我遇到错误了吗?
此示例显示了PS 2.0中> $null
命令的意外行为:
PS C:\> 1; $(Write-Output 2; Write-Host 3; return; Write-Host 4) > $null; 5
1
3
5
return
命令的行为就像它从某个嵌套上下文中退出一样(尽管没有创建它的命令),停止$()
表达式执行,然后在当前上下文中继续执行(如果不应该执行),直到Write-Output 5
命令。
(来自wOxxOm's答案)
> $null
操作已执行之前 $()
表达式并禁止其输出; return
命令不会从当前上下文中退出(考虑为BUG),但是会停止$()
表达式执行> $null
操作中,将执行之前 $()
表达式并在所有情况下均禁止其输出; return
命令完全退出当前上下文| Out-Null
,[void]
,$null =
操作将在之后 $()
表达式中执行,如果其中没有return
命令,则禁止其输出; return
命令完全退出当前上下文抑制命令输出的不同方法:
... > $null
重定向到$null
变量错误在PS 1.0和2.0中。在PS 3.0+中,输出可能与其他方法不同]]... | Out-Null
管道到Out-Null
cmdlet性能问题*[void]...
转换为[void]
类型Advisable$null = ...
分配给$null
变量Advisable有四种抑制输出的方法:重定向到$ null变量PS C:\> 1; $(2; return)> $ null; 3 1 3到Out-Null cmdlet PS C:\> 1; $(2;返回)|空无; 3 1 2 ...
2
实际上是作为Write-Output 2
执行的