Seq使用逗号作为小数点分隔符。

10

我在我的一台电脑(Ubuntu LTS 14.04)上注意到了奇怪的seq行为:它使用逗号而不是点作为小数分隔符:

seq 0. 0.1 0.2
0,0
0,1
0,2

在我的另一台电脑上使用相同版本的seq(8.21),得到了正常的结果(也是相同的Ubuntu版本)。最奇怪的是,当我从第一台机器通过ssh登录远程机器时,我观察到了同样的问题。甚至从有冲突的机器提交到远程机器的作业调度程序(slurm)的bash脚本也出现了这个问题。我非常困惑。为什么(以及如何!)会发生这种情况?

1个回答

8

很可能是LANG变量或其他与本地化有关的变量。在一个seq表现正常的计算机上尝试:

$ LANG=fr_FR seq 0. 0.1 0.2
0,0
0,1
0,2
$ LANG=en_US seq 0. 0.1 0.2
0.0
0.1
0.2

谢谢,这一定是相关的,因为在有问题的机器上使用 LANG=en_US 可以解决问题,但在正常工作的机器上使用 LANG=fr_FR 却不会产生此问题。更奇怪的是,当我运行 echo $LANG 时,两台机器都输出 en_US.UTF-8 - Miguel
@Miguel,可能有其他变量(或者另一台机器上没有法语)。我对本地化的东西不太熟悉,请尝试执行“env”命令并查看是否有任何有趣的内容(也许是“LC_ALL”)? - cnicutar
1
我的机器上LC_NUMERIC被设置为fi_FI.UTF-8。将其更改为en_US.UTF-8可以解决问题。我不明白的是为什么ssh会将所有与语言相关的变量传递到远程机器。感谢您的帮助。 - Miguel
@Miguel 有趣。你在.ssh/environment或类似的地方有什么东西吗? - cnicutar
不是在任何一台机器上出现的问题。这一定是服务器的问题,因为当我从机器1 ssh进入时,echo $LC_NUMERIC 的结果是 fi_FI.UTC-8,而从机器2中的结果是 en_GB.UTC-8。此外,当我ssh到自己的服务器上时,结果是相同的,但错误的 seq 行为没有被继承... - Miguel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接