PowerShell 中 $args 的令人困惑的评估
Posted
技术标签:
【中文标题】PowerShell 中 $args 的令人困惑的评估【英文标题】:Confusing evaluation of $args in PowerShell 【发布时间】: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
这有什么具体原因吗?我知道如何解决这个问题,但是我想知道那里的任何人是否可以解释这个原因。
【问题讨论】:
【参考方案1】:管道使用 $input。试试这个:
function test 1..3 | % echo "args inside pipeline: $input" ; echo "args outside pipeline: $args"
【讨论】:
好的,谢谢。但是我仍然会说这种行为很奇怪。根据开发人员的说法,他们努力使用最小惊喜原则来设计它;) 为了解释这里发生了什么, $args 包含命令的每个未捕获(因为没有更好的术语)参数。在您的管道示例中,您从 ForEach-Object (%) 命令中请求剩余的 $args,因为这是将在其中评估脚本块的上下文。 这种事情也会发生在 $_ 自动变量上。你需要观察它所处的环境。以上是关于PowerShell 中 $args 的令人困惑的评估的主要内容,如果未能解决你的问题,请参考以下文章
在 powershell 中传递命令行 $args,从函数到函数