2013-04-25 6 views
6

Podczas pisania skryptu bash można używać brace expansion do szybkiego generowania list:PowerShell odpowiednik Bash nawiasów do generowania lists/tablice

Bash Brace Expansion

Jaki jest najprostszy sposób, aby wygenerować podobną listę w PowerShell? Mogę użyć operatora .. lub, operatorów do generate an array, ale w jaki sposób mogę przedłużyć elementy statycznym literałem ciągu?

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 

Odpowiedz

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 

Należy zauważyć, że % jest alias ForEach-Object cmdletu.

Rachunek

8

mam nadzieję być udowodnione źle tutaj, ale nie sądzę, istnieje sposób, aby to zrobić dokładnie jak z bash, lub z jak kilku klawiszy.

Możesz powtórzyć listę, przepuszczając ją przez foreach-object, aby osiągnąć ten sam wynik.

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

lub za pomocą skrótów:

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

W obu przypadkach (% jest aliasem dla foreach-object), wyjście jest:

test1 
test2 
test3 
test4 
test5 

Uwaga: Jeśli "buduje się to w skrypcie do publikacji/dystrybucji/ponownego wykorzystania, użyj bardziej szczegółowego foreach-object, a nie stenografia % - dla czytelności.

+0

'1..5 | % {"test $ _"} 'jest jeszcze krótszy. – BACON

+0

Popraw to jesteś - edytowałem mój kod. Naprawdę muszę zerwać ten przyzwyczajenie do konkatenacji. – alroc

+0

Tak, myślałem o używaniu dla każdego, ale było to trochę zbyt szczegółowe. '1..5 | % {"server {0:00}" -f $ _} 'jest na tyle krótki, że prawdopodobnie go użyję, chyba że ktoś wymyśli lepsze rozwiązanie. Dzięki! –

Powiązane problemy