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

jum*_*mbo 6 arrays powershell string-formatting

我想将一个格式化的字符串输出到控制台.我有一个字符串变量和一个字符串数组变量.

当我这样做:

$arr = "aaa","bbb"
"test {0} + {1}" -f "first",$arr
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

test first + System.Object[]
Run Code Online (Sandbox Code Playgroud)

但我需要输出为:

test first + aaa,bbb
Run Code Online (Sandbox Code Playgroud)

或类似的东西......

Joe*_*oey 13

几个选项:

  1. 首先加入数组,这样就不依赖于默认ToString()实现(只打印类名):

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

    PS> $first = 'first'
    PS> "test $first + $arr"
    test first + aaa bbb
    
    Run Code Online (Sandbox Code Playgroud)

    您可以更改设置使用的分隔符$OFS,默认情况下为空格:

    PS> $OFS = ','
    PS> "test $first + $arr"
    test first + aaa,bbb
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您可以获得相同的结果(包括有关的注释$OFS)

    PS> 'test {0} + {1}' -f 'first',(''+$arr)
    test first + aaa bbb
    
    Run Code Online (Sandbox Code Playgroud)

    这也会强制数组首先转换为单个字符串.

  • `-f`只是`String.Format()`的简单方便,它在这方面使用与.NET相同的语义.字符串插值是一个棘手的主题,因为它使用不变文化将对象转换为字符串(显然); 它还将使用`$ OFS`连接数组.一般来说,我现在不能确切地总结确切的差异.好玩的东西:`$ a =(日期),(日期),(日期); 写主机$ a; 写主机"$ a"` (2认同)