18

在编写 Bash 脚本时,您可以使用大括号扩展来快速生成列表:

Bash 大括号扩展

在 Powershell 中生成类似列表的最简单方法是什么?我可以使用 .. 或 , 运算符来生成一个数组,但是如何在项目前加上静态字符串文字?

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
4

3 回答 3

21
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-Objectcmdlet 的别名。

于 2013-04-25T21:04:12.277 回答
10

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

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

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

或使用速记:

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

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

test1
test2
test3
test4
test5

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

于 2013-04-25T18:57:25.293 回答
3

我有一种方法可以使用int 的 tostring 方法。末尾的“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 中进行大括号扩展...

于 2020-06-16T15:07:08.737 回答