2013-04-25 50 views
6

當編寫一個bash腳本可以使用brace expansion快速生成列表:PowerShell的等價猛砸括號擴展的生成列表/陣列

Bash Brace Expansion

什麼是產生在PowerShell中類似的列表的最簡單的方法是什麼?我可以使用..或者運算符generate an array,但是我怎樣才能用靜態字符串文字來加上項目呢?

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 

回答

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 

注意對於的foreach對象 cmdlet的別名。

Bill

8

我希望能在這裏是錯誤證明,但我不相信有辦法做到這一點正是喜歡使用bash,或儘可能少的按鍵。

您可以遍歷列表中的管道,通過foreach-object來達到相同的結果。

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

或者使用速記:

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

在這兩種情況下(%foreach-object的別名),輸出爲:

test1 
test2 
test3 
test4 
test5 

注:如果您'將其構建成用於發佈/分發/重用的腳本,請使用更詳細的內容foreach-object,而不是簡寫% - 爲了便於閱讀。

+0

'1..5 | %{「test $ _」}'更短。 – BACON 2013-04-25 19:02:42

+0

正確的是 - 編輯我的代碼。我真的需要打破這種連接習慣。 – alroc 2013-04-25 19:05:54

+0

是的,我想每個人都在使用,但它有點太冗長。 '1..5 | %{「server {0:00}」-f $ _}'很短,所以我可能會使用它,除非有人能想到更好的解決方案。謝謝! – 2013-04-25 19:06:00