对于Bash中的大数序列进行循环

时间:2018-10-02 13:59:52

标签: bash for-loop

在Bash脚本中,我使用了一个简单的for循环,如下所示:

for i in $(seq 1 1 500); do
   echo $i
done

此for循环工作正常。但是,当我想使用更大的数字序列(例如10 ^ 8到10 ^ 12)时,循环似乎不会开始。

for i in $(seq 100000000 1 1000000000000); do
   echo $i
done

我无法想象,这些数字太大而无法处理。所以我的问题是:我错了吗?还是可能还有其他问题?

1 个答案:

答案 0 :(得分:2)

问题在于,执行循环之前,$(seq ...)被扩展为单词列表 。因此,您的初始命令类似于:

for i in 100000000 100000001 100000002 # all the way up to 1000000000000!

结果太长,这就是导致错误的原因。

一种可能的解决方案是使用其他样式的循环:

for (( i = 100000000; i <= 1000000000000; i++ )) do
  echo "$i"
done

此“ C样式”构造使用终止条件,而不是遍历单词的文字列表。


便携式样式,用于POSIX shell:

i=100000000
while [ $i -le 1000000000000 ]; do
  echo "$i"
  i=$(( i + 1 ))
done