为什么powershell自动将我的字符串附加在一起并将其作为第一个参数传递?

时间:2011-08-04 15:21:42

标签: powershell

我有以下代码:

function printVars($var1, $var2)
{
  Write-Host "var1: $var1"
  Write-Host "var2: $var2"
}

printVars ('asdf', 'qwer')

它产生了这个结果:

var1: asdf qwer
var2:

我期待着这个:

var1: asdf
var2: qwer

为什么要这样做?如何让它做我想做的事?

3 个答案:

答案 0 :(得分:4)

由于('asdf','qwer')被视为数组,因此$var1获取数组且$var2为空。

执行printVars 'asdf' 'qwer'

即使你没有parantheses并且只有逗号,它也是一个数组。

试试这个:

$b ="one","two"
$b.GetType()

答案 1 :(得分:3)

已经提供了正确答案,但对于那些寻找更多信息的人,我从PowerShell快速参考图表中删除了这个。这假设函数f的签名是f($a, $b, $c)

syntax pitfalls of a function call

因此,可以使用空格分隔的位置参数或与顺序无关的命名的参数调用函数。其他陷阱表明你需要认识到逗号,括号和空格。

如需进一步阅读,请参阅我刚刚在Simple-Talk.com上发表的最新文章Down the Rabbit Hole- A Study in PowerShell Pipelines, Functions, and Parameters。该文章还包含指向快速参考/挂图的链接。

答案 2 :(得分:0)

我现在看到了。我把这个功能叫错了。

应该是这样的:

printVars 'asdf' 'qwer'

报价也可以删除。

虽然看起来像Perl和C这样的大括号语言调用函数就像使用大多数shell调用另一个命令一样。

当我把逗号放在那里时,它将字符串附加到一个字符串中并将其作为第一个参数传递。