Powershell在函数调用后忽略表达式

时间:2013-05-12 11:32:15

标签: powershell syntax expression

这是一个powershell脚本:

function PickANumber()
{
  12
}

function GetTheAnswer()
{
  PickANumber + 30
}

$answer = GetTheAnswer
write-output "The answer is $answer"

此脚本的输出为:

The answer is 12

据我猜测,这是因为powershell函数调用的参数或逗号之间没有括号,所以PickANumber + 30被解析为PickANumber('+', 1)而不是PickANumber() + 1 }。这不是一个错误,未使用的args被忽略(比如使用JavaScript)。

如果你稍微改一下,那么答案就是42:

function GetTheAnswer()
{
  $a = PickANumber
  $a + 30
}

但肯定有一种方法可以在一条线上做到这一点吗?

我在这里张贴是因为这也会咬别人。

2 个答案:

答案 0 :(得分:8)

正确的电话是

(PickANumber) + 30

原始代码PickANumber + 30表示使用两个来调用PickANumber 参数+30PickANumber忽略。

答案 1 :(得分:3)

为了避免这个陷阱,你可以像这样定义你的功能

function PickANumber()
{
  [CmdletBinding()]
  param()

  12
}

执行PickANumber + 30时,您将收到错误

  

PickANumber:找不到接受的位置参数   参数'+'。