PowerShell 中是不是有字符串连接快捷方式?
Posted
技术标签:
【中文标题】PowerShell 中是不是有字符串连接快捷方式?【英文标题】:Is there a string concatenation shortcut in PowerShell?PowerShell 中是否有字符串连接快捷方式? 【发布时间】:2014-02-09 23:15:24 【问题描述】:喜欢数字吗?
例如,
$string = "Hello"
$string =+ " there"
在 Perl 中你可以这样做
my $string = "hello"
$string .= " there"
这似乎有点冗长
$string = $string + " there"
或
$string = "$string there"
【问题讨论】:
【参考方案1】:实际上,您的操作员倒退了。应该是+=
,而不是=+
:
$string = "Hello"
$string += " there"
下面是一个演示:
PS > $string = "Hello"
PS > $string
Hello
PS > $string += " there"
PS > $string
Hello there
PS >
但是,这是您可以做您想做的最快/最短的解决方案。
【讨论】:
好尴尬,我都没试过!【参考方案2】:避免使用+=
构建字符串
至于using the increase assignment operator (+=
) to create a collection,字符串也是相互的,因此使用increase assignment operator (+=
) 构建字符串可能会变得非常昂贵,因为它将连接字符串并分配(复制!) 将其返回到变量中。相反,我建议使用 PowerShell pipeline 和 -Join
operator 来构建您的字符串。
除了它更快之外,它实际上也更多DRY:
$String = 'Hello', 'there' -Join ' ' # Assigns: 'Hello there'
或者只是
-Join @('One', 'Two', 'Three') # Yields: 'OneTwoThree'
对于一些项目,它可能没有多大意义,但让我给你一个更常见的例子,创建一个格式化的数字列表,比如:
[Begin]
000001
000002
000003
[End]
你可以这样做:
$x = 3
$String = '[Begin]' + [Environment]::NewLine
for ($i = 1; $i -le $x; $i++) $String += '0:000000' -f $i + [Environment]::NewLine
$String += '[End]' + [Environment]::NewLine
但是,您实际上可以使用 PowerShell 方式进行操作:
$x = 3
$String = @(
'[Begin]'
for ($i = 1; $i -le $x; $i++) '0:000000' -f $i
'[End]'
) -Join [Environment]::NewLine
性能测试
为了显示使用增加赋值运算符 (+=
) 的性能下降,让我们将 $x
增加一个因子 1000
直到 20.000
:
1..20 | ForEach-Object
$x = 1000 * $_
$Performance = @x = $x
$Performance.Pipeline = (Measure-Command
$String1 = @(
'[Begin]'
for ($i = 1; $i -le $x; $i++) '0:000000' -f $i
'[End]'
) -Join [Environment]::NewLine
).Ticks
$Performance.Increase = (Measure-Command
$String2 = '[Begin]' + [Environment]::NewLine
for ($i = 1; $i -le $x; $i++) $String2 += '0:000000' -f $i + [Environment]::NewLine
$String2 += '[End]' + [Environment]::NewLine
).Ticks
[pscustomobject]$Performance
| Format-Table x, Increase, Pipeline, @n='Factor'; e=$_.Increase / $_.Pipeline; f='0.00' -AutoSize
结果:
x Increase Pipeline Factor
- -------- -------- ------
1000 261337 252704 1,03
2000 163596 63225 2,59
3000 432524 127788 3,38
4000 365581 137370 2,66
5000 586370 171085 3,43
6000 1219523 248489 4,91
7000 2174218 295355 7,36
8000 3148111 323416 9,73
9000 4490204 373671 12,02
10000 6181179 414298 14,92
11000 7562741 447367 16,91
12000 9721252 486606 19,98
13000 12137321 551236 22,02
14000 14042550 598368 23,47
15000 16390805 603128 27,18
16000 18884729 636184 29,68
17000 21508541 708300 30,37
18000 24157521 893584 27,03
19000 27209069 766923 35,48
20000 29405984 814260 36,11
另见:PowerShell scripting performance considerations - String addition
【讨论】:
以上是关于PowerShell 中是不是有字符串连接快捷方式?的主要内容,如果未能解决你的问题,请参考以下文章
powershell PowerShell:重新创建LastPass桌面快捷方式
如何编写使用快捷方式关闭 PowerShell 的 AHK 脚本?