【问题标题】:How to avoid leading white space addition with string formatting?如何避免使用字符串格式添加前导空格?
【发布时间】:2017-04-11 09:32:16
【问题描述】:

我有一个返回 PSCustomObject 的函数,如下所示:

Function Get-Data {
  # ...
  [PSCustomObject]@{
    Url = $Url
    Id = $Id
  }
}

后来,我这样调用这个函数:

$data = Get-Data

然后我想输出格式化字符串,包括该对象的属性值。最接近我想要的结果是使用下面的行输出:

Write-Host "$($data.Url)|$($data.Id)|OK"

问题是第一个 | 字符后的空格。

它来自哪里?如何以正确的方式摆脱它?

【问题讨论】:

  • 可能来自Get-Data函数中的原始$Id值。 $($data.Id.Trim()) 删除
  • 您还可以更新您的函数以在将值添加到对象Id = $Id.Trim()之前从值的开头或结尾删除任何空格@

标签: powershell hashtable whitespace string-formatting pscustomobject


【解决方案1】:

您可以对每个字符串调用.Trim()(如 Mathias 所述)。或者您可以使用 regex 替换任何空白字符:

Write-Host ("$($data.Url)|$($data.Id)|OK" -replace '\s*') 

【讨论】:

  • 我终于找到了问题所在。我将在我的答案中更详细地描述它。我接受您的回答,因为它正确解决了问题中描述的问题。谢谢!
【解决方案2】:

显然,这一切都隐藏在 Get-Data 方法的细节中,我轻描淡写地忽略了......

在创建该自定义对象之前,该方法执行了许多 REST API 调用,其中一个调用的输出没有分配给变量,也没有“Out-Null”-ed。结果,返回的真实自定义对象是由该 Web 响应加上我明确创建的作为属性的自定义对象组成的对象。

看起来 PowerShell 努力为我推断类型,但它未能管理那些前导空格...

希望这可以节省一些时间。

【讨论】:

  • 谢谢!有完全相同的问题,因为我在函数内部打印了一个尚未定义的变量,然后与 return 语句配对,显然引入了一个分隔空格......!
【解决方案3】:

只是想在这个主题上添加另一个提示,因为我也遇到了这个问题。即使我在函数内的返回值中没有看到前导空格。一旦返回值,就会有一个额外的前导空格。我发现输出对象内容的前一行 Write-Verbose 代码把我搞砸了

写详细 $obj | * |外串

我在输出周围添加了括号,这解决了我的问题 写详细($obj | fl * | Out-String)

我猜关于 Out-String 部分的某些东西弄乱了函数的管道并导致额外的空白被添加到函数返回的字符串值的开头

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多