2012-05-16 4 views
5

Ich möchte eine formatierte Zeichenfolge an die Konsole ausgeben. Ich habe eine String-Variable und eine String-Array-Variable.Verwendung von string.format mit String-Array in Powershell

Wenn ich dies tun:

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

Der Ausgang ist dies:

test first + System.Object[] 

Aber ich muss ausgegeben werden:

test first + aaa,bbb 

oder etwas ähnliches ...

Antwort

12

Mehrere Optionen:

  1. Registriert das Array zuerst, so dass Sie auf der Standard-ToString() Implementierung verlassen Sie sich nicht (die nur den Klassennamen druckt):

    PS> 'test {0} + {1}' -f 'first',($arr -join ',') 
    test first + aaa,bbb 
    
  2. Verwenden String Interpolation:

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

    Sie können das verwendete Trennzeichen ändern, indem Sie $OFS festlegen, das standardmäßig ein Leerzeichen ist:

    PS> $OFS = ',' 
    PS> "test $first + $arr" 
    test first + aaa,bbb 
    
  3. Sie können das gleiche Ergebnis (einschließlich der Notiz $OFS) mit

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

    bekommen Dies das Array zwingt zunächst auch umgewandelt in einen einzelnen String werden.

+0

+1 Für die Vollständigkeit der Antwort –

+0

Sehr nett! Ich würde normalerweise String-Interpolation sofort verwenden, aber ich entdeckte gerade -f-Operator für string.format und mochte es so sehr, dass ich es überall verwendete und verwirrt wurde :) Dies wirft eine andere Frage auf, was der Unterschied in der Hintergrundverarbeitung von -f-Operator und ist String-Interpolation? Vielleicht ein paar Artikel? Danke – jumbo

+2

'-f' ist nur eine einfache Bequemlichkeit für' String.Format() ', es verwendet die gleiche Semantik wie .NET in dieser Hinsicht. Die String-Interpolation ist ein heikles Thema, da sie Objekte (scheinbar) unter Verwendung der invarianten Kultur in String konvertiert; Es wird auch Arrays mit $ OFS verbunden. Generell fühle ich mich im Moment nicht sicher, die genauen Unterschiede genau zusammenzufassen. Etwas Spaß: '$ a = (Datum), (Datum), (Datum); Schreib-Host $ a; Schreib-Host "$ a" ' – Joey