2012-10-11 30 views
9

我使用Cygwin的意大利本地化,因此我的printf命令使用逗号分开的花车,并且不会明白点分隔的花车如何在bash中更改printf命令中的小数点分隔符?

$ printf "%f" 3.1415 
-bash: printf: 3.1415: invalid number 
0,000000 

$ printf "%f" 3,1415 
3,141500 

这引起了一些问题,因为基本上一切使用点分隔小数位。

如何将小数点分隔符从逗号更改为点?

回答

12

有几个局部变量tha控制cygwin(或任何bash shell的本地化)的本地化。您可以使用locale命令查看它们的值。您应该看到这样的事情:

$ locale 
LANG=it_IT.UTF-8 
LC_CTYPE="it_IT.UTF-8" 
LC_NUMERIC="it_IT.UTF-8" 
LC_TIME="it_IT.UTF-8" 
LC_COLLATE="it_IT.UTF-8" 
LC_MONETARY="it_IT.UTF-8" 
LC_MESSAGES="it_IT.UTF-8" 
LC_ALL= 

您可以通过使用locale -va看到变量的可能值。它们都格式化为_.UTF-8。 UTF-8是可选的。 为了切换到北美浮动分离风格,只需将LC_NUMERIC设置为其美国值。

$ export LC_NUMERIC="en_US.UTF-8" 

只需设置变量LC_NUMERIC就好像它是一个常规的变量将无法正常工作,您需要使用export命令。

你可以把这个脚本的头部,或者你可以把它永久将其添加到您的~/.bashrc或您的~/.bash_profile

希望这是有帮助的!

+1

你可以只设置'LC_NUMERIC =“en_US.UTF- 8“',但不会改变整个系统的设置,但是在脚本或shell的范围内完成设置。此外,您可以通过'LC_NUMERIC =”en_US更改命令的语言环境。 UTF-8“printf”%f“3.1415”。 – jarno

+1

请参阅下面的答案以获得一个更好的(IMO)解决方案,该解决方案独立于您安装的语言环境。 – mav

6

如果你不想与系统配置的一塌糊涂,你可以尊重你的语言环境,但要确保你的脚本使用点为小数的:

$ printf "%f" 3.5 
-bash: printf: 3,5: invalid number 
0.000000 

$ LANG=C printf "%f" 3.5 
3.500000 
+1

有些情况下'LANG = C'不够,'LC_NUMERIC = C'效果更好。 –