这产生1和10为什么bash忽略序列大括号中的' - '?
echo {1..10}
这一个产生在1和10之间的所有奇数之间的所有数值(增量/步长值是2时)
echo {1..10..2}
我尝试了一下,它变成我是否由-
符号前缀的增量,它没有任何效果
echo {1..10..-2}
这是为什么接受,而不是一个错误?
这产生1和10为什么bash忽略序列大括号中的' - '?
echo {1..10}
这一个产生在1和10之间的所有奇数之间的所有数值(增量/步长值是2时)
echo {1..10..2}
我尝试了一下,它变成我是否由-
符号前缀的增量,它没有任何效果
echo {1..10..-2}
这是为什么接受,而不是一个错误?
实验使用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)。
从bash(1)
手册页:
当供给增量,它被用作每学期之间的差异。
所以... 技术上输出确实有每个项之间的差-2。但你仍然告诉它增加而不是减少顺序。
谢谢,我第一次没有注意到一句话。我认为尽管这样描述,{1..2..1}应该产生“2 1”,因为2-1 == 1.但是它对-1和1输出相同。嗯..或者也许这只是“差异”意味着什么的问题?我可以想象,“2 1”和“1 2”都有不同的“1”,但是你怎么能有“-1”的区别? – 2011-05-05 13:29:36
@Johannes认为这是“绝对的”差异。 – pepoluan 2011-05-06 05:57:16
我的意思是只讨论带有'-'的步骤,而不是限制之一:(为什么需要大小而不是仅仅出错?当设计一种新语言时,人们会选择大小而不是只是给出了一个错误? – 2011-05-05 14:23:09
@Johannes:不是开发者的功能,或者开发团队附近的任何地方,我不能肯定地说,但是......一个原因是为了尽量减少错误的数量;如果你能做一些合理的事情而不会产生错误,这样做。 – 2011-05-05 15:13:41