Powershell相当于Bash Brace Expansion用于生成列表/数组

时间:2013-04-25 18:50:12

标签: arrays powershell brace-expansion

编写Bash脚本时,您可以使用brace expansion快速生成列表:

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

3 个答案:

答案 0 :(得分:10)

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-Object cmdlet的别名。

比尔

答案 1 :(得分:8)

我希望在这里被证明是错误的,但我不相信有一种方法可以像使用bash一样完全,或者用很少的键击。

您可以通过foreach-object管道遍历列表以获得相同的结果。

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

或使用速记:

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

在这两种情况下(%foreach-object的别名),输出为:

test1
test2
test3
test4
test5

注意:如果您要将其构建为用于发布/分发/重用的脚本,请使用更详细的foreach-object,而不是简写% - 以提高可读性。

答案 2 :(得分:3)

我有一种使用int's tostring method的方法。最后的“ 000”是特殊格式的代码。它总是填充到正确的零个数。如果您真的想简洁明了,也可以将通配符与方法名称一起使用,例如t * g。

1..10 | % tostring computer000

computer001
computer002
computer003
computer004
computer005
computer006
computer007
computer008
computer009
computer010


1..10 | % t*g 192\.168\.1\.0

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10

'x'也是十六进制打印的格式代码。

10..15 | % tostring x

a
b
c
d
e
f

总是有-replace,它也适用于数组。 “ ^”是“行首”的正则表达式。使用“ $”代替“行尾”。

(echo test dev prod) -replace '^','server-'

server-test
server-dev
server-prod

哈哈,我从没尝试过。

(echo test dev prod) -replace (echo ^ server-)

server-test
server-dev
server-prod

也许他们可以在Powershell 8中进行这种支撑扩展...