【问题标题】:Confusing evaluation of $args in PowerShellPowerShell 中 $args 的令人困惑的评估
【发布时间】:2010-10-01 18:55:11
【问题描述】:

根据定义,$args 变量应该包含传递给脚本函数的所有参数。但是,如果我在函数内部构建管道,则 $args 变量的计算结果为 null。有谁知道为什么?

看这个例子:

function test { 1..3 | % { echo "args inside pipeline: $args" } ; echo "args outside pipeline: $args" }

这是传递参数“hello”时的输出:

PS> test hello
args inside pipeline:
args inside pipeline:
args inside pipeline:
args outside pipeline: hello

这有什么具体原因吗?我知道如何解决这个问题,但是我想知道那里的任何人是否可以解释这个原因。

【问题讨论】:

    标签: function powershell arguments


    【解决方案1】:

    管道使用 $input。试试这个:

    function test { 1..3 | % { echo "args inside pipeline: $input" } ; echo "args outside pipeline: $args" }
    

    【讨论】:

    • 好的,谢谢。但是我仍然会说这种行为很奇怪。根据开发人员的说法,他们努力使用最小惊喜原则来设计它;)
    • 为了解释这里发生了什么, $args 包含命令的每个未捕获(因为没有更好的术语)参数。在您的管道示例中,您从 ForEach-Object (%) 命令中请求剩余的 $args,因为这是将在其中评估脚本块的上下文。
    • 这种事情也会发生在 $_ 自动变量上。你需要观察它所处的环境。
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多