2012-05-16 16 views
5

Voglio produrre una stringa formattata su console. Ho una variabile stringa e una variabile array stringa.Come utilizzare string.format con array di stringhe in PowerShell

Quando faccio questo:

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

Il risultato è questo:

test first + System.Object[] 

ma ho bisogno di essere uscita:

test first + aaa,bbb 

o qualcosa di simile ...

risposta

12

Diverse opzioni:

  1. Partecipa l'array prima, in modo che non si basano su l'implementazione predefinita ToString() (che si limita a stampare il nome della classe):

    PS> 'test {0} + {1}' -f 'first',($arr -join ',') 
    test first + aaa,bbb 
    
  2. Usa interpolazione stringa:

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

    È possibile modificare il delimitatore utilizzato impostando $OFS, che per impostazione predefinita è uno spazio:

    PS> $OFS = ',' 
    PS> "test $first + $arr" 
    test first + aaa,bbb 
    
  3. È possibile ottenere lo stesso risultato (tra cui la nota su $OFS) con

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

    Questo costringe la matrice da convertire in una singola stringa prima, anche.

+0

+1 Per la completezza della risposta –

+0

Molto bello! Normalmente userei l'interpolazione delle stringhe, ma ho appena scoperto -f operatore per string.format e mi è piaciuto così tanto che l'ho usato ovunque e mi sono confuso :) Ciò solleva un'altra domanda su quale sia la differenza nell'elaborazione in background dell'operatore -f e interpolazione a stringa? Forse alcuni articoli? Grazie – jumbo

+2

'-f' è solo una semplice comodità per' String.Format() ', utilizza la stessa semantica di .NET a tale riguardo. L'interpolazione delle stringhe è un argomento delicato, poiché converte gli oggetti in string usando la cultura invariante (apparentemente); si unirà anche agli array usando '$ OFS'. Generalmente non mi sento sicuro in questo momento di riassumere accuratamente le differenze esatte. Qualcosa di divertente: '$ a = (data), (data), (data); Scrivi-Host $ a; Host di scrittura "$ a" ' – Joey

Problemi correlati