Bash sprintf在GNU Awk 3.1.5和GNU Awk 3.17中的行为不同

Bash sprintf在GNU Awk 3.1.5和GNU Awk 3.17中的行为不同,bash,awk,gnu,multiple-versions,Bash,Awk,Gnu,Multiple Versions,在bash终端中考虑以下命令: echo 0.00027849383762390271 | awk '{print sprintf("%.20f",$1)}' 我连接了两台机器 第一个版本是GNU Bash版本4.15和GNU Awk版本3.1.7。上述命令返回预期值:0.00027849383762390268(尽管最后两位数字与我的初始数字不同) 第二台机器有GNU Bash版本3.2.39和GNU Awk版本3.1.5。上面的命令返回:000000000000000(逗号后20个零)。请

在bash终端中考虑以下命令:

echo 0.00027849383762390271 | awk '{print sprintf("%.20f",$1)}'
我连接了两台机器

第一个版本是GNU Bash版本4.15和GNU Awk版本3.1.7。上述命令返回预期值:0.00027849383762390268(尽管最后两位数字与我的初始数字不同)

第二台机器有GNU Bash版本3.2.39和GNU Awk版本3.1.5。上面的命令返回:000000000000000(逗号后20个零)。请注意“,”而不是“.”


为什么第二台机器的行为与第一台机器不同,以及如何使其行为与第一台机器相同

这两台机器的区域设置不同。在执行这两个命令之前设置
LC\u ALL=C
(或您想要的任何语言环境),请参阅以获取更多信息。

I从同一台本地计算机ssh到这两台计算机。那么为什么他们的行为会有所不同呢?机器中是否存在设置不同的变量?顺便说一句,按照您的建议设置LC_ALL很有效。整个命令如下:
echo 0.00027849383762390271 | LC_ALL=C awk'{print sprintf(“%.20f”,$1)}'
Yes有一些变量或配置文件,但idk where/what。谷歌
locale
开始调试。在两台机器上运行
env
,查找差异等。。。