2013-04-25 7 views
6

Quando si scrive uno script Bash è possibile utilizzare brace expansion per generare rapidamente gli elenchi:PowerShell equivalente di Bash Brace di espansione per la generazione di liste/array

Bash Brace Expansion

Qual è il modo più semplice per generare un elenco simile in PowerShell? Posso usare gli operatori .. o, per generate an array, ma come posso aggiungere agli elementi un valore letterale stringa statico?

PS C:\Users\gb> 1..5 
1 
2 
3 
4 
5 

PS C:\Users\gb> "test"+1..5 
test1 2 3 4 5 

PS C:\Users\gb> "test","dev","prod" 
test 
dev 
prod 

PS C:\Users\gb> "asdf"+"test","dev","prod" 
asdftest dev prod 

risposta

7
PS C:\> "test","dev","prod" | % { "server-$_" } 
server-test 
server-dev 
server-prod 
PS C:\> 1..5 | % { "server{0:D2}" -f $_ } 
server01 
server02 
server03 
server04 
server05 
PS C:\> 1..5 | % { "192.168.0.$_" } 
192.168.0.1 
192.168.0.2 
192.168.0.3 
192.168.0.4 
192.168.0.5 

noti che % è un alias per il ForEach-Object cmdlet.

Bill

8

Spero di essere dimostrato male qui, ma non credo ci sia un modo per farlo esattamente come con bash, o con il minor numero di tasti.

È possibile scorrere l'elenco collegandolo a foreach-object per ottenere lo stesso risultato.

1..5 | foreach-object { "test" + $_ }

o utilizzando la scorciatoia:

1..5 | %{"test$_"}

In entrambi i casi (% è un alias per foreach-object), l'output è:

test1 
test2 
test3 
test4 
test5 

Nota: se si stiamo costruendo questo in uno script per la pubblicazione/distribuzione/riutilizzo, usare il più dettagliato foreach-object, non la stenografia % - per la leggibilità.

+0

'1..5 | % {"test $ _"} 'è ancora più breve ancora. – BACON

+0

Correggere si è - modificato il mio codice. Ho davvero bisogno di rompere questa abitudine di concatenazione. – alroc

+0

Sì, ho pensato di usarlo per ognuno, ma era un po 'troppo prolisso. '1..5 | % {"server {0:00}" -f $ _} 'è abbastanza corto che probabilmente userò questo a meno che qualcuno non possa pensare ad una soluzione migliore. Grazie! –

Problemi correlati