我有以下功能(我只是将其粘贴到命令行中):
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中有另一种方法进行字符串插值?
答案 0 :(得分:4)
你并没有做任何愚蠢的事情,但是你正在将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