为什么需要一对额外的支架?

ca9*_*3d9 6 powershell

以下powershell脚本

"one","two","three" | % { "$(($l++)): $_" }
Run Code Online (Sandbox Code Playgroud)

将打印

1: one
2: two
3: three

但是,取下支架后 $l++

"one","two","three" | % { "$($l++): $_" }
Run Code Online (Sandbox Code Playgroud)

它会打印出来

: one
: two
: three

jon*_*n Z 12

这是因为$l++是一个无效的陈述.在powershell中,某些类型的表达式在用作语句时不会显示.无效语句包括赋值和递增/递减运算符.当它们在表达式中使用时,它们返回一个值,但是当它们用作独立语句时,它们不返回任何值.这是很好的解释的Windows PowerShell在行动布鲁斯·帕耶特:

增量和减量运算符几乎不包含在PowerShell中,因为它们引入了一个问题.在C和C#等语言中,当您使用其中一个运算符作为语句时:$ a ++不会显示任何内容.这是因为C和C#中的语句不返回值.但是,在PowerShell中,所有语句都返回一个值.这导致了混乱.人们会写这样的脚本:

$sum=0
$i=0
while ($i -lt 10) { $sum += $i; $i++ }
$sum
Run Code Online (Sandbox Code Playgroud)

并惊讶地看到数字1到10显示.这是因为$ a ++返回了一个值,而PowerShell正在显示每个语句的结果.这太令人困惑了,我们几乎从语言中删除了这些操作符.然后我们想到了一个可撤销的陈述.基本上,这意味着某些类型的表达式在用作语句时不会显示.无效语句包括赋值和递增/递减运算符.当它们在表达式中使用时,它们返回一个值,但是当它们用作独立语句时,它们不返回任何值.同样,这是其中一个不会影响您使用PowerShell的细节,而不是让它按预期工作.(来源:Windows Powershell in Action)