Here's a little piece of code that outputs 1 2 3 ... with 1 second interval.
while ($true) {
sleep -s 1
"$(($i++))"
}
Run Code Online (Sandbox Code Playgroud)
How is it possible?
mkl*_*nt0 10
注释中有很好的指针,但让我深入一点:
的说明$i++:
$i++用途++,所述增量操作,递增变量的值$i通过1,如可以是从语言,如C#和C / C ++熟悉。不出所料,也存在强制减量运算符--。
由于变量位于变量之后(后缀形式),因此在语句中使用变量的值后++便会进行递增;将其放置前变量- (前缀形式)将执行递增第一 ; 如果单独使用增量/减量运算,则该区别无关紧要。++$i
$i假定包含数字类型的实例,否则发生错误;如果$i尚未初始化变量,则其值有效$null,PowerShell [int]强制将其强制为-typed 0。因此,在其声明的上下文中$i++求值为,0然后递增为 1。
一个如递增/递减表达式$i++都被视为一个任务,你可以把它看成- $i = $i + 1-在PowerShell中的任务没有产生输出(他们不返回任何东西;他们只更新变量的值)。
(...)周围的说明$i++:
(...))你把它变成一个表达,这意味着该值的分配的传递通过,从而它可以参与一个更大的表达式; 例如:
$i = 0...没有输出-仅将值分配0给变量$i。($i = 1)...输出1:由于(...),也会输出分配的值。(++$i)... pre-increment:将$ito 的值递增2并输出该值。 ($i++)...递减后:输出2当前值,然后将该值递增到3。$(...)周围的说明($i++):
$(...)在不直接支持语句的上下文中嵌入一个甚至多个语句的输出时,需要使用subexpression运算符。值得注意的是,您可以使用它将命令输出嵌入可扩展的字符串("...")中,即执行字符串插值。
$(...)仅需要将表达式(例如,包含在(...),属性访问($foo.bar),索引,($foo[0])和方法调用($foo.Baz())中的内容)和命令(例如Get-Date)嵌入,而不仅仅是诸如in中的变量引用"Honey, I'm $HOME"。请参阅此答案以获取有关PowerShell中可扩展字符串的更多信息。尽管在您的简单示例中并没有严格要求可扩展的字符串- ($i++)只会产生看起来相同的输出[1] -这$(...)对于使($i++)较大的字符串的一部分值有用。例如,"Iteration #$(($i++))"要打印"Iteration #0","Iteration #1"...
[1] ($i++)是一个数字,而是"$(($i++)"一个string,其中数字到字符串的转换是字符串内插的一部分。尽管通常会产生相同的控制台输出,但实际上对于非整数数字可能会有所不同,例如1.2,因为直接输出应用对文化敏感的字符串化,而字符串插值对文化不变。因此,使用效果的培养,使用,作为十进制标记-例如,fr-FR,1.2打印-培养适当-作为1,2到控制台,而"$(1.2)" 总是打印为1.2
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |