使用+(加号)符号启动PowerShell单线程的含义是什么?

时间:2015-07-07 14:59:06

标签: powershell

我遇到过一个PowerShell单线程脚本,第一个字符是+(加号)符号,我想知道这样做是什么意思。

为字符“A”提供Unicode代码点的示例:

+'A'['']

2 个答案:

答案 0 :(得分:17)

一元+用作类型int32的隐式强制转换。

解析器只会尝试将右侧的值转换为整数。

让我们看一下(并逐步完成)你的陈述,就像解析器一样:

+'A'['']

让我们尝试“标记化”该陈述:

+ 'A' [ ''  ]
^  ^  ^  ^  ^
|  |  |  |  |
|  |  |  |  Array index close operator
|  |  |  Empty string
|  |  Array index open operator
|  Literal string of length 1 with value A
Unary + operator

为了知道我们是否可以应用+操作符,我们需要评估右手参数:

'A'[''] 

我们可以索引字符串(例如'A')的唯一方法是将其视为char[],并在[和{{1}之间提供整数值运算符。空字符串本身不是整数,但是当隐式转换为1时,它变为](在powershell中尝试0[int]""以查看此操作)。现在声明看起来更像是这样:

'' -as [int]

索引'A'[0] 的{​​{1}}显然是char,因此现在是我们的右手参数,字符大写为A.

我们现在应用一元0,我们得到char A的相应ASCII值,恰好是+

我们也可以这样做:

A

或者,使用Briantist的例子:

65

如果您想知道解析器如何将某个语句拆分为单个标记,请使用[PSParser]::Tokenize()方法:

+("A" -as [char])

答案 1 :(得分:5)

它在code golfing中用于转换为数字。它比[int]短。

['']的重要性在于方括号用于从字符串中获取[char]''是一个空字符串,被强制转换为0

提问者指的是一个特定问题的解决方案,其中一个限制是数字0到9根本不能用在答案中。

请参阅PowerShell One-Liner Contest 2015the explanation of this (rather brilliant) solution from the winner