2012-02-05 38 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