为什么bash在序列括号扩展中忽略' - '?

时间:2011-05-05 13:23:48

标签: bash sequence

这产生1到10之间的所有数字

echo {1..10}

这个产生1到10之间的所有奇数(增量/步长值为2)

echo {1..10..2}

我进行了一些实验,结果是如果我用-符号作为增量前缀,它就没有效果了

echo {1..10..-2}

为什么这被接受,而不是错误?

2 个答案:

答案 0 :(得分:2)

来自bash(1)手册页:

  

当提供增量时,它被用作每个术语之间的差异。

所以... 技术上输出 每个术语之间的差异为-2。但你仍然告诉它在序列中增加而不是减少。

答案 1 :(得分: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)。