bash:for循环使用无符号整数

时间:2014-02-01 16:10:55

标签: bash for-loop

我试图遍历所有unsigned int(32位)。我以为我可以做到:

#!/bin/bash

for i in {0..4294967295}; do
  echo $i
done

然而,对于bash 4.1,它打印出的全部是:

$ ./loop.sh
0
-1

我当然不能使用$ seq()构造,那么如何在bash中对所有uint32执行for循环?

2 个答案:

答案 0 :(得分:2)

使用bash 4.2,我会以您的示例获得SIGSEGV。似乎问题是由于您在4294967295循环中引入1 + {0..4294967295}个参数(基本上由for扩展)导致其窒息的事实。

尽管如此,我观察到的SIGSEGV和你观察到的错误行为都要保证报告问题。

home page表示主要讨论列表为<bug-bash@gnu.org>


您可以使用修改后的for循环:

for((i=0;i<=4294967295;i++)); do echo $i; done

答案 1 :(得分:0)

请注意,这么多的值会占用太多内存,以至于无法在任何计算机上完成,因为它需要大量的内存