簡體   English   中英

寫無限bash循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM