编写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
答案 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中进行这种支撑扩展...