在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
我无法想象,这些数字太大而无法处理。所以我的问题是:我错了吗?还是可能还有其他问题?
答案 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