2011-05-05 37 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