2012-02-05 19 views
3

我想更好了解PowerShell的范围运算符在这里发生了什么。

$ myArray的= 1..10 所以我们有1 2 3 4 $ myArray的... 10

现在我想用-1得到数组中的最后一个值并显示1 - 10在反向,所以我

$ myArray的[( - 1).. 0]但是这仅产生10×1(仅这两个值,在之间没有任何东西)。

但是,如果我做$ myarray的[$ myArray的[-1] ... 0]这将产生所有的值预计10 9 8 ... 1

谁能给这个解释?我会认为(-1)为[]内将评估为它似乎是在做那么范围将踢在为10..0最后一个元素或值10,但它似乎是一个范围被跳过,只给两个列出的值。这仅仅是学习PowerShell的一个练习,我没有具体的应用。顺便说一句,我得到相同的10 1只有当我运行-1没有()。

感谢, 杰森

回答

2

这是很简单的

让我们来看看-1..0回报:

-1 
0 

所以$ myarray的[-1..0]相当于$ myArray的[ -1,0]因此结果。

但10..0表达式返回扭转的整个范围。因此,$myArray[$myArray[-1]..0]表达式按照您的预期工作。

+0

所以,通过这个思想,范围-1..0基本上是两个元素和-1被翻译成数组的最后一个元素所以这就是为什么我得到10 1?所以,给刚刚-1..0范围内第一个安打,看到-1,但在拼尽了全力$ myArray的[$ myArray的[-1] ... 0]变量被eval'ed第一则的范围内操作踢看到10?所以关键似乎是这种表达以及它如何得到评估?感谢您的解释。 Jason – user1190989 2012-02-05 19:47:06

+0

请参阅get-help about_operator_precedence。数组索引操作在范围操作之前得到评估。 – mjolinor 2012-02-06 03:14:01

相关问题