3

我正在尝试在字符串中进行一些正常的变量扩展,当它在函数中时,它会出现乱序。

function MakeMessage99($startValue, $endValue) { "Ranges from $startValue to $endValue" }

MakeMessage99(1, 100)

这返回Ranges from 1 100 to然后它应该返回Ranges from 1 to 100

4

2 回答 2

2

powershell 中的函数不应使用括号括起来参数。反而:

PS C:\> MakeMessage99 1 100
Ranges from 1 to 100

其中 MakeMessage 是您的函数,“1”是第一个位置的参数,“100”是第二个位置的参数。根据about_Functions_Advanced_Parameters

默认情况下,所有函数参数都是位置参数。Windows PowerShell 按照在函数中声明参数的顺序将位置编号分配给参数。

Powershell 有几种检查输入的方法。您可以将输入转换为数字类型。还有一些内置的参数验证方法可以防止将来出现这种错误。如果你真的想要一个整数,一个简单的强制转换会导致一个数组成为无效输入。例如:

function MakeMessage99 {
  Param
  (
    [int]$startValue, 
    [int]$endValue
  ) 

  "Ranges from $startValue to $endValue" 
}

您还可以探索范围验证(例如[ValidateRange(0,100)])、模式验证(例如[ValidatePattern("[0-9][0-9][0-9][0-9]")]验证四位数字)或上面链接中列出的其他验证属性。

于 2013-09-10T21:40:45.587 回答
1

这是 PowerShell 中的常见缺陷。当你调用...

MakeMessage99(1, 100)

...您实际上是在传递一个包含值的数组1100作为第一个参数。1要作为第一个参数和第二个参数传递100,请使用...

MakeMessage99 1 100
于 2013-09-10T21:42:07.027 回答