我有以下功能(我只是将其粘贴到命令行中):
function Test ($url, $interface, $method)
{
Write-Host "http://$url/$interface/$method"
}
然后我称之为:
Test("localhost:90", "IService", "TestMethod")
我得到:
http://localhost:90 IService TestMethod//
我希望得到:
http://localhost:90/IService/TestMethod
如果我首先将结果设置为变量,则会发生相同的事情:
$res = "http://$url/$interface/$method"
Write-Host $res
我也不认为这是由于
Write-Host
引起的,因为如果将此字符串传递到.NET对象中,则会遇到相同的错误。如果我仅定义每个变量,这完全使我感到困惑。因此,这与函数参数有关。我可以从命令行执行此操作:
PS C:\> $url = "localhost:90"
PS C:\> $interface = "IService"
PS C:\> $method = "TestMethod"
PS C:\> Write-Host "http://$url/$interface/$method"
http://localhost:90/IService/TestMethod
PS C:\>
我是在做一些愚蠢的事情,还是在PowerShell中有另一种方法来进行字符串插值?
最佳答案
您没有做任何愚蠢的事情,但是您正在将PowerShell与Python之类的东西进行合并。
当我做:
Function Count-Args
{
$args.count
}
Count-args($var1, $var2, $var3)
我得到的数字为1,您放入
()
的所有三个变量都作为单个数组转换为$args
。只需将调用函数的方式更改为
test mysite myinterface mymethod
即可。注意ss64 site advice。Don't add brackets around the function parameters:
$result = Add-Numbers (5, 10) --Wrong!
$result = Add-Numbers 5 10 --Right