[英]Writing infinite bash loop
如何编写一个无限循环,在bash中回显从1到无穷大的数字。 我正在使用for循环,但它被使用超过100000000的值的bash杀死。
#!/bin/bash
for a in {1..100000000..1}
do
echo "$a"
done
任何替代品吗?
你是否尝试过做一个while
循环?
#!/bin/bash
num=0;
while :
do
num=$((num+1))
echo "$num"
done
这应该适用于所有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
难道你不能做while true;
?
a=0
while true;
do
a=$((a+1))
# $[$a+1] also works.
echo "$a"
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.