【问题标题】:Powershell is ignoring expression after function callPowershell在函数调用后忽略表达式
【发布时间】:2013-05-12 11:32:14
【问题描述】:

这是一个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
}

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

我在这里发帖是因为这也会咬别人。

【问题讨论】:

    标签: powershell syntax expression


    【解决方案1】:

    正确的调用是

    (PickANumber) + 30
    

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

    【讨论】:

      【解决方案2】:

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

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

      执行PickANumber + 30会报错

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

      【讨论】:

      • 很好,这会导致不正确的代码给出错误。现在结合另一个答案“(PickANumber)+ 30”来修复给定的错误。
      猜你喜欢
      • 2016-05-01
      • 2016-03-30
      • 2019-10-06
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多