2011-05-05 71 views
2

這產生1和10爲什麼bash忽略序列大括號中的' - '?

echo {1..10} 

這一個產生在1和10之間的所有奇數之間的所有數值(增量/步長值是2時)

echo {1..10..2} 

我嘗試了一下,它變成我是否由-符號前綴的增量,它沒有任何效果

echo {1..10..-2} 

這是爲什麼接受,而不是一個錯誤?

回答

1

實驗使用bash 4.1(而不是默認情況下,我使用的機器,它無法識別符號作爲特殊安裝的3.2版本)顯示:

$ echo {12..10..2} 
12 10 
$ echo {12..10..-2} 
12 10 
$ echo {12..-10..2} 
12 10 8 6 4 2 0 -2 -4 -6 -8 -10 
$ echo {12..-10..-2} 
12 10 8 6 4 2 0 -2 -4 -6 -8 -10 
$ echo {-12..-10..-2} 
-12 -10 
$ echo {-12..-10..2} 
-12 -10 
$ 

因此,它似乎是增量的方向由前兩個數字控制;遞增量由第三個控制(如果第三個缺失,則默認爲1)。

+0

我的意思是隻討論帶有'-'的步驟,而不是限制之一:(爲什麼需要大小而不是僅僅出錯?當設計一種新語言時,人們會選擇大小而不是隻是給出了一個錯誤? – 2011-05-05 14:23:09

+0

@Johannes:不是開發者的功能,或者開發團隊附近的任何地方,我不能肯定地說,但是......一個原因是爲了儘量減少錯誤的數量;如果你能做一些合理的事情而不會產生錯誤,這樣做。 – 2011-05-05 15:13:41

2

bash(1)手冊頁:

當供給增量,它被用作每學期之間的差異。

所以... 技術上輸出確實有每個項之間的差-2。但你仍然告訴它增加而不是減少順序。

+0

謝謝,我第一次沒有注意到一句話。我認爲儘管這樣描述,{1..2..1}應該產生「2 1」,因爲2-1 == 1.但是它對-1和1輸出相同。嗯..或者也許這只是「差異」意味着什麼的問題?我可以想象,「2 1」和「1 2」都有不同的「1」,但是你怎麼能有「-1」的區別? – 2011-05-05 13:29:36

+1

@Johannes認爲這是「絕對的」差異。 – pepoluan 2011-05-06 05:57:16