重定向到$ null和Out-Null之间的区别

时间:2017-02-23 04:34:40

标签: powershell null powershell-v2.0 void

有四种方法可以抑制输出:

  1. 重定向到$null变量
  2. 管道到Out-Null cmdlet
  3. 投射到[void]类型
  4. 分配到$null变量
  5. 以下是所有四种情况的示例输出:

    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 的答案)

    • 在PS 1.0和2.0中> $null操作在 $()表达式之前执行并抑制其输出; return命令不会退出当前上下文(被视为 BUG ),但会停止$()表达式执行
    • PS 3.0中的
    • 和较新的> $null操作在 $()表达式之前执行并抑制其输出; return命令完全退出当前上下文
    • | Out-Null[void]$null =操作在 $()表达式后执行,如果没有return则禁止输出命令; return命令完全退出当前上下文

    最后

    抑制命令输出的不同方法:

    1. ... > $null重定向到$null变量
      不同PS版本和方法之间的行为不一致
    2. ... | Out-Null管道到Out-Null cmdlet
      效果问题
    3. [void]...施放到[void]类型
      宜先
    4. $null = ...分配给$null变量
      宜先

0 个答案:

没有答案