这是我的代码:
# 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在乐趣中不可见?
答案 0 :(得分:4)
将脚本文件想象成一个函数。函数体是脚本内容,函数名是脚本文件名。当您向脚本发送参数时,它们将在脚本内容中可用。当您向函数发送参数时,$ args将在函数内部访问。
以下面的例子为例:
#。\ test-args.ps1function foo {write-host“print function` $ args $ args”}
#print script args写主机“打印脚本`$ args $ args”
#print function argsfoo 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