写无限bash循环

时间:2015-11-09 20:30:03

标签: linux bash

如何在bash中编写一个无限循环回显从1到无穷大的数字。 我正在使用一个for循环,但它被使用超过100000000的值的bash杀死。

#!/bin/bash
for a in {1..100000000..1}
do
  echo "$a"
done

任何替代方案?

3 个答案:

答案 0 :(得分:5)

您是否尝试过while循环?

#!/bin/bash

num=0;

while :
do
    num=$((num+1))
    echo "$num"
done

答案 1 :(得分:4)

这适用于所有POSIX shell:

i=0; while :; do echo "$((i+=1))"; done

:可与true内置(您可以使用它)互换:它是一个总是成功的无操作(=返回0)。

如果整数溢出困扰您,并且您希望使用标准工具进行任意精度:

nocontinuation(){ sed ':x; /\\$/ { N; s/\\\n//; tx }'; }
i=99999999999999999999999999999999999999999999999999999999999999999999;
while : ; do i=`echo "$i + 1" | bc | nocontinuation`; echo "$i"; done

这会非常慢,因为它会在每次迭代中产生。 为避免这种情况,您可以重用一个bc实例并通过管道与它进行通信:

#!/usr/bin/bash
set -e
nocontinuation(){ sed -u ':x; /\\$/ { N; s/\\\n//; tx }'; }
trap 'rm -rf "$tmpdir"' exit
tmpdir=`mktemp -d`
cd "$tmpdir"
mkfifo p n 
<p bc | nocontinuation >n &
exec 3>p
exec 4<n

i=99999999999999999999999999999999999999999999999999999999999999999999;
while : ; do 
  echo "$i + 1" >&3
  read i <&4
  echo "$i"
done

答案 2 :(得分:0)

你不能只做while true;吗?

a=0
while true;
do
    a=$((a+1))
    # $[$a+1] also works.
    echo "$a"
done