如何在PowerShell中使用字符串数组和string.format函数

8
我希望能够将格式化的字符串输出到控制台。我有一个字符串变量和一个字符串数组变量。
当我执行以下操作时:
$arr = "aaa","bbb"
"test {0} + {1}" -f "first",$arr

输出结果如下:
test first + System.Object[]

但是我需要输出为:

test first + aaa,bbb

或者类似的东西...
1个回答

14

几个选项:

  1. 首先将数组连接起来,这样就不会依赖默认的ToString()实现(它只是打印类名):

    PS> 'test {0} + {1}' -f 'first',($arr -join ',')
    test first + aaa,bbb
    
  2. 使用字符串插值:

    PS> $first = 'first'
    PS> "test $first + $arr"
    test first + aaa bbb
    
    你可以通过设置 $OFS 来更改分隔符,默认情况下为一个空格:
    PS> $OFS = ','
    PS> "test $first + $arr"
    test first + aaa,bbb
    
    PS> 'test {0} + {1}' -f 'first',(''+$arr)
    test first + aaa bbb
    

    这也会强制将数组转换为单个字符串。


非常好!我通常会立即使用字符串插值,但我刚刚发现了-string.format运算符,喜欢它的风格,所以我在各个地方都使用了它并感到有些困惑 :) 这引出了另一个问题,-f运算符和字符串插值的后台处理有何不同?也许有一些文章可以提供帮助?谢谢。 - jumbo
2
-f 只是 String.Format() 的一种简单便利方式,它在这方面使用与 .NET 相同的语义。字符串插值是一个棘手的问题,因为它使用不变文化(显然)将对象转换为字符串;它还使用 $OFS 连接数组。总的来说,我现在不太自信能够准确地概括出确切的差异。有趣的事情:$a = (date),(date),(date); Write-Host $a; Write-Host "$a" - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接