2012-05-16 23 views
5

Quiero enviar una cadena formateada a la consola. Tengo una variable de cadena y una variable de matriz de cadena.Cómo utilizar string.format con matriz de cadenas en powershell

Cuando hago esto:

$arr = "aaa","bbb" 
"test {0} + {1}" -f "first",$arr 

La salida es la siguiente:

test first + System.Object[] 

pero necesito de salida sea:

test first + aaa,bbb 

o algo similar ...

Respuesta

12

Varias opciones:

  1. Únete a la matriz en primer lugar, por lo que no se basan en la implementación predeterminada ToString() (que sólo imprime el nombre de clase):

    PS> 'test {0} + {1}' -f 'first',($arr -join ',') 
    test first + aaa,bbb 
    
  2. Uso cadena de interpolación:

    PS> $first = 'first' 
    PS> "test $first + $arr" 
    test first + aaa bbb 
    

    Puede cambiar el delimitador utilizado configurando $OFS, que de forma predeterminada es un espacio:

    PS> $OFS = ',' 
    PS> "test $first + $arr" 
    test first + aaa,bbb 
    
  3. Usted puede obtener el mismo resultado (incluyendo la nota sobre $OFS) con

    PS> 'test {0} + {1}' -f 'first',(''+$arr) 
    test first + aaa bbb 
    

    Esto obliga a la matriz que ha de convertirse en una sola cadena en primer lugar, también.

+0

+1 Por completar la respuesta –

+0

Muy bonito! Normalmente usaría la interpolación de cadenas de inmediato, pero descubrí -f operator for string.format y me gustó tanto que lo usé en todas partes y me confundí :) Esto plantea otra pregunta: ¿cuál es la diferencia en el procesamiento de fondo del operador -f y interpolación de cuerda? Tal vez algunos artículos? Gracias – jumbo

+2

'-f' es simplemente una conveniencia directa para' String.Format() ', usa la misma semántica que .NET en ese sentido. La interpolación de cadenas es un tema complicado, ya que convierte los objetos en cadenas utilizando la cultura invariante (aparentemente); también unirá matrices usando '$ OFS'. En general, no me siento seguro en este momento para resumir con precisión las diferencias exactas. Algo divertido: '$ a = (fecha), (fecha), (fecha); Write-Host $ a; Write-Host "$ a" ' – Joey

Cuestiones relacionadas