请考虑以下代码:
function f2
{
[CmdletBinding()]
param( $e4da2f9 )
process{}
}
function f1
{
[CmdletBinding()]
param
(
$e4da2f9
)
process
{
$e4da2f9
$command = 'f2'
$splat = @{
e4da2f9 = 'value passed to f2'
}
# the following line clobbers this function's $e4da2f9...
. $command @splat | Out-Null
# ...but this line does not
# f2 @splat | Out-Null
$e4da2f9
}
}
f1 'value passed to f1'
运行它,令人惊讶地产生以下结果:
value passed to f1
value passed to f2
如果您注释掉. $command ...
并取消注释f2 @splat ...
,则会产生预期结果:
value passed to f1
value passed to f1
. $functionName
调用函数之间是否存在一些根本区别?答案 0 :(得分:2)
这是因为你点源了这个功能而不仅仅是运行它(&)。你特意说在f1的范围内运行f2。
用以下内容替换违规行:
& $command @splat | Out-Null
让它像你想要的那样工作。