我遇到过一个PowerShell单线程脚本,第一个字符是+(加号)符号,我想知道这样做是什么意思。
为字符“A”提供Unicode代码点的示例:
+'A'['']
答案 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 2015和the explanation of this (rather brilliant) solution from the winner。