2013-04-25 5 views
6

Wenn ein Bash-Skript schreiben Sie brace expansion schnell Listen erzeugen können:Powershell-Äquivalent von Bash Brace Expansion zur Erzeugung von Listen/Arrays

Bash Brace Expansion

Was ist die einfachste Art und Weise zu erzeugen, eine ähnliche Liste in Powershell? Ich kann die .. oder Operatoren zu generate an array verwenden, aber wie kann ich die Elemente mit einem statischen String-Literal voranstellen?

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 

Antwort

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 

Beachten Sie, dass % ein Alias ​​für die Cmdlets ForEach-Object ist.

Rechnung

8

Ich hoffe, hier falsch bewiesen werden, aber ich glaube nicht, dass es eine Möglichkeit, es zu tun genau wie mit bash ist, oder mit so wenige Tastendrücken.

Sie können über die Liste iterieren, indem Sie sie durch eine foreach-object leiten, um das gleiche Ergebnis zu erzielen.

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

Oder mit der Kurzschrift:

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

In beiden Fällen (% ist ein Alias ​​für foreach-object), die Ausgabe ist:

test1 
test2 
test3 
test4 
test5 

Hinweis: Wenn Sie Bauen Sie dies in ein Skript für die Veröffentlichung/Verteilung/Wiederverwendung, verwenden Sie die ausführlichste foreach-object, nicht die Kurzschrift % - für Lesbarkeit.

+0

'1..5 | % {"test $ _"} 'ist noch kürzer. – BACON

+0

Korrigieren Sie sind - meinen Code bearbeitet. Ich muss diese Verkettungsgewohnheit wirklich brechen. – alroc

+0

Ja, ich dachte daran, nur für jeden zu verwenden, aber es war ein bisschen zu ausführlich. '1..5 | % {"server {0:00}" -f $ _} 'ist kurz genug, dass ich wahrscheinlich nur verwenden werde, es sei denn, jemand kann sich eine bessere Lösung ausdenken. Vielen Dank! –

Verwandte Themen