gpt4 book ai didi

linux - Bash 数量限制?

转载 作者:IT王子 更新时间:2023-10-29 00:01:29 25 4
gpt4 key购买 nike

我问了a question早些时候涉及从文本文件中提取大素数并将它们放入另一个文件中。它应该抓取每个素数,包括 2^32 之后的第一个素数,但由于某种原因,该脚本停止工作。

#!/bin/bash
n=4294967296
last=0
while read number
do
if [ $last -gt $n ]
then break
fi
echo $number
last=$number
done < primes.txt > primes2.txt

它最终循环遍历了这 11 个数字:

4232004449  
4232004479
4232004493
4232004509
4232004527
4232004533
4232004559
4232004589
4232004593
4232004613
004437

原始文件中没有 004437,我的 bash 将处理超过 8999999999999999999 的数字

有人知道为什么会这样吗?

64-bit Ubuntu 10.04, 16GB RAM, 8-cores @ 3.60 GHz
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)

更新:

在下载并编译 jfgagne 提供的“固定”bash 并在我的 bash 脚本中链接到它之后,它在相同的确切位置出错。使用与我最初的主要问题相当的更快的 perl,我从 ls -al 得到了一些文件大小:

        11  next_prime (just to make sure this was counting bytes accurately)
2147483659 primes2.txt
2147483670 one_too_many

2147483659 = 2^31 + 11

下一个素数(4232004631)的大小是11个字节这包含 4232004613 以内的所有素数。我还意识到 004437 来自此错误循环底部素数的末尾 (4232004437)。似乎有什么东西试图前进,但停滞不前。

最佳答案

不,它与您的操作系统的比特大小无关。它取决于 bash 源代码深处的简单声明。

从 2002 年左右开始,这个声明就是 __int64_t。从那时起,bash 版本 >= 3.00 总是使用 64 位整数变量,并且它不依赖于架构!它只取决于 bash 版本。

以前版本的 bash 始终使用 32 位整数,即使在 64 位操作系统上也是如此。

关于linux - Bash 数量限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com