字符串扩展正在改变顺序或字符串

时间:2013-09-10 21:38:26

标签: powershell

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

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

MakeMessage99(1, 100)

这会返回Ranges from 1 100 to,然后它会返回Ranges from 1 to 100

2 个答案:

答案 0 :(得分:2)

powershell中的函数不应使用括号括起参数。代替:

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

MakeMessage是你的函数,“1”是第一个位置的参数,“100”是第二个位置的参数。根据{{​​3}}:

  

默认情况下,所有函数参数都是位置参数。 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]")]以验证四位数字)或上面链接中列出的其他验证属性。

答案 1 :(得分:1)

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

MakeMessage99(1, 100)

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

MakeMessage99 1 100