【问题标题】:Formatting a Powershell string containing hashtable values格式化包含哈希表值的 Powershell 字符串
【发布时间】:2012-03-21 08:54:46
【问题描述】:

这个问题的答案很可能是微不足道的,但我花了半个小时,仍然无法解决。

假设我有以下哈希表:

$hash = @{face='Off';}

我试图做的是将“face”的值与其他一些字符串元素一起输出。

这行得通:

Write-Host Face $hash['face']
=> Face Off

但是,这不是:

Write-Host Face/$hash['face']
=> Face/System.Collections.Hashtable[face]

不知何故,缺少空格影响了运算符的优先级 - 它现在将 $hash 评估为字符串,然后是连接的 [face]。

为了解决这个优先级问题,我试过了:

Write-Host Face/($hash['face'])
=> Face/ Off

我现在有一个我不想要的额外空间。 这行得通,但我不希望额外的行只是重新分配:

$hashvalue = $hash['face']
write-host Face/$hashvalue
=> Face/Off

知道如何让它作为单线工作吗?

【问题讨论】:

    标签: powershell format hashtable


    【解决方案1】:

    当然,使用子表达式:

    Write-Host Face/$($hash['face'])
    

    一般来说,如果我需要使用 Write-Host 精确控制空白,我只会使用字符串:

    Write-Host "Face/$($hash['face'])"
    

    是的,在这种情况下,您需要再次使用子表达式,但更多是因为您根本无法在字符串中包含像 $foo['bar'] 这样的表达式;-)

    顺便说一句,$hash.face 的工作效果同样好,视觉混乱更少。

    【讨论】:

    • 子表达式是这里的关键(包含在 $() 中)。我模糊地意识到他们的角色,但错过了这里的适用性。
    • 不接受给别人回答的机会。速度有点快
    【解决方案2】:

    在这种情况下,如果涉及的变量更多,我更喜欢使用字符串格式。虽然在这种情况下您可以使用 $(..),但请注意,字符串格式化将消除很多疑问、不便并提高可读性:

    write-host ("Face/{0}" -f $hash['face'])
    

    【讨论】:

    • 感谢您指出 -f 选项。我从未使用过它,我绝对可以看到它如何使更复杂的场景更易于管理
    • llevera,它是一个运算符,而不是一个选项。
    【解决方案3】:

    除了像 Joey 展示的那样使用子表达式之外,您还可以:

    使用字符串格式:

    Write-Host ('Face/{0}' -f $hash.face)
    

    这会将面部键的值粘贴到 {0}

    的位置

    使用字符串连接:

    Write-Host ('Face/' + $hash.face)
    

    这两个都需要评估一个表达式,该表达式输出一个字符串,用作Write-HostObject 参数。

    【讨论】:

    • 我认为值得注意的是,对于 Write-Host ('Face/' + $hash.face) 示例,括号很重要。没有它们,+ 将被视为字符串文字。 Powershell 字符串格式化需要一点时间来适应!
    • @llevera 是的,括号告诉 PowerShell 首先执行字符串连接。输出是一个 System.String 对象,用作Write-Host -Object 参数值。
    【解决方案4】:

    另一种选择是使用 Write-Host 的 -Separator 选项插入斜线:

    $hash = @{Face="off"}
    Write-Host ("Face",$hash.Face) -Separator '/'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-08
      • 2011-12-02
      • 2017-07-27
      • 2012-10-31
      • 2022-01-10
      • 2012-10-24
      • 2011-11-19
      • 1970-01-01
      相关资源
      最近更新 更多