Function PowerShell中$args的混乱评估

Function PowerShell中$args的混乱评估,function,powershell,arguments,Function,Powershell,Arguments,根据定义,$args变量应该包含传递给脚本函数的所有参数。但是,如果在函数中构造管道,$args变量的计算结果为null。有人知道为什么吗 请参见此示例: function test { 1..3 | % { echo "args inside pipeline: $args" } ; echo "args outside pipeline: $args" } 这是传递参数“hello”时的输出: 有没有具体的原因?我知道如何解决这个问题,但我想知道是否有人能解释原因。管道使用$input。试

根据定义,$args变量应该包含传递给脚本函数的所有参数。但是,如果在函数中构造管道,$args变量的计算结果为null。有人知道为什么吗

请参见此示例:

function test { 1..3 | % { echo "args inside pipeline: $args" } ; echo "args outside pipeline: $args" }
这是传递参数“hello”时的输出:


有没有具体的原因?我知道如何解决这个问题,但我想知道是否有人能解释原因。

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

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

好的,谢谢。不过我还是觉得这种行为很奇怪。根据开发人员的说法,他们努力使用最小意外的原则来设计它;)为了解释这里发生了什么,$args包含命令的每个未捕获(因为缺少更好的术语)参数。在管道示例中,您要求从ForEach Object(%)命令中获得剩余的$args,因为这是脚本块将在其中求值的上下文。这种情况也会发生在$automatic变量中。你需要注意它所处的环境。
function test { 1..3 | % { echo "args inside pipeline: $input" } ; echo "args outside pipeline: $args" }