为什么我不能从函数内部访问$ args?

时间:2009-03-01 03:36:07

标签: powershell

这是我的代码:

# hi.ps1

function fun
{
    Write-Host $args
}

Write-Host '---------------'
Write-Host $args
Write-Host '---------------'
fun
Write-Host '---------------'

这是输出:

PS C:\scratch> .\hi there jim
---------------
there jim
---------------

---------------

我的问题是,为什么$ args在乐趣中不可见?

4 个答案:

答案 0 :(得分:4)

将脚本文件想象成一个函数。函数体是脚本内容,函数名是脚本文件名。当您向脚本发送参数时,它们将在脚本内容中可用。当您向函数发送参数时,$ args将在函数内部访问。

以下面的例子为例:

#。\ test-args.ps1

function foo {write-host“print function` $ args $ args”}

#print script args

写主机“打印脚本`$ args $ args”

#print function args

foo hello world ...

#脚本结束

答案 1 :(得分:2)

根据我对powershell的理解,$ args引用了当前函数的参数。第一次调用Write-Host时,$ args引用顶级参数。在内心的乐趣中,你指的是有趣的论据,这些都没有给出。

有关变量的更多信息,请参阅PowerShell Variables

答案 2 :(得分:1)

$ args似乎有“脚本”范围。有三个范围:本地,全局和脚本。

如果功能改变如下:

function fun
{
    Write-Host $script:args
}

然后它会起作用。 “script:”是范围解析运算符(“local:”是默认值)。我在实验上发现了这个结果,我不能说我知道脚本范围的确切含义,但看起来脚本范围内的变量在某种程度上属于脚本本身。

编辑:我接受自己的答案是最好的答案,因为它解决了我的问题,但也看到了其他答案和他们对一些有用信息的评论。

答案 3 :(得分:0)

$MyInvocation.UnboundArguments