如何在 PowerShell 函数中进行字符串替换?
Posted
技术标签:
【中文标题】如何在 PowerShell 函数中进行字符串替换?【英文标题】:How do I do a string replacement in a PowerShell function? 【发布时间】:2010-09-06 02:47:04 【问题描述】:如何将函数输入参数转换为正确的类型?
我想返回一个字符串,其中删除了传递给它的部分 URL。
这可行,但它使用的是硬编码字符串:
function CleanUrl($input)
$x = "http://google.com".Replace("http://", "")
return $x
$SiteName = CleanUrl($HostHeader)
echo $SiteName
这失败了:
function CleanUrl($input)
$x = $input.Replace("http://", "")
return $x
Method invocation failed because [System.Array+SZArrayEnumerator] doesn't contain a method named 'Replace'.
At M:\PowerShell\test.ps1:13 char:21
+ $x = $input.Replace( <<<< "http://", "")
【问题讨论】:
【参考方案1】:史蒂夫的回答有效。您尝试重现 ESV 脚本的问题在于您使用的是 $input
,这是一个保留变量(它会自动将多个管道输入收集到一个变量中)。
但是,除非您需要 -replace 的额外功能(它处理正则表达式等),否则您应该使用 .Replace()。
function CleanUrl([string]$url)
$url.Replace("http://","")
这会奏效,但也会如此:
function CleanUrl([string]$url)
$url -replace "http://",""
另外,当您调用 PowerShell 函数时,请勿使用括号:
$HostHeader = "http://google.com"
$SiteName = CleanUrl $HostHeader
Write-Host $SiteName
希望对您有所帮助。顺便演示一下$input:
function CleanUrls
$input -replace "http://",""
# Notice these are arrays ...
$HostHeaders = @("http://google.com","http://***.com")
$SiteNames = $HostHeader | CleanUrls
Write-Output $SiteNames
【讨论】:
【参考方案2】:这里的概念是正确的。
问题在于您选择的变量名。 $input 是 PowerShell 用来表示管道输入数组的保留变量。如果你改变你的变量名,你应该没有任何问题。
PowerShell 确实有 a replace operator,所以你可以把你的函数变成
function CleanUrl($url)
return $url -replace 'http://'
【讨论】:
【参考方案3】:function CleanUrl([string] $url)
return $url.Replace("http://", "")
【讨论】:
【参考方案4】:这对我有用:
function CleanUrl($input)
return $input.Replace("http://", "")
【讨论】:
不要使用 $input 变量。已保留。以上是关于如何在 PowerShell 函数中进行字符串替换?的主要内容,如果未能解决你的问题,请参考以下文章
如何在PowerShell中使用运算符'-replace'来替换具有特殊字符的文本字符串并成功替换
Powershell -replace 当替换字符串包含 $+
Powershell -replace 当替换字符串包含 $+