我正在尝试遍历所有无符号的int(32位)。我以为我可以简单地做:
#!/bin/bash
for i in {0..4294967295}; do
echo $i
done
但是,在 bash 4.1 中,它打印出来的只是:
$ ./loop.sh
0
-1
我当然不能使用 $seq() 结构,那么如何在所有 uint32 的 bash 中执行 for 循环呢?
使用bash 4.2
,我得到了你的例子SIGSEGV
。 问题似乎是由于您在for
循环中引入了4294967295
+1
个参数(基本上扩展了{0..4294967295}
个),导致它阻塞。
尽管如此,我观察到的SIGSEGV
和您观察到的错误行为都保证报告该问题。
主页说主要讨论列表是<bug-bash@gnu.org>
。
您可以使用修改后的for
循环:
for((i=0;i<=4294967295;i++)); do echo $i; done
请注意,这么多值会占用如此多的内存,以至于在任何计算机上都无法完成,因为它会占用大量内存