我使用Cygwin的意大利本地化,因此我的printf命令使用逗号分开的花车,并且不会明白点分隔的花车如何在bash中更改printf命令中的小数点分隔符?
$ printf "%f" 3.1415
-bash: printf: 3.1415: invalid number
0,000000
$ printf "%f" 3,1415
3,141500
这引起了一些问题,因为基本上一切使用点分隔小数位。
如何将小数点分隔符从逗号更改为点?
我使用Cygwin的意大利本地化,因此我的printf命令使用逗号分开的花车,并且不会明白点分隔的花车如何在bash中更改printf命令中的小数点分隔符?
$ printf "%f" 3.1415
-bash: printf: 3.1415: invalid number
0,000000
$ printf "%f" 3,1415
3,141500
这引起了一些问题,因为基本上一切使用点分隔小数位。
如何将小数点分隔符从逗号更改为点?
有几个局部变量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
希望这是有帮助的!
如果你不想与系统配置的一塌糊涂,你可以尊重你的语言环境,但要确保你的脚本使用点为小数的:
$ printf "%f" 3.5
-bash: printf: 3,5: invalid number
0.000000
$ LANG=C printf "%f" 3.5
3.500000
有些情况下'LANG = C'不够,'LC_NUMERIC = C'效果更好。 –
你可以只设置'LC_NUMERIC =“en_US.UTF- 8“',但不会改变整个系统的设置,但是在脚本或shell的范围内完成设置。此外,您可以通过'LC_NUMERIC =”en_US更改命令的语言环境。 UTF-8“printf”%f“3.1415”。 – jarno
请参阅下面的答案以获得一个更好的(IMO)解决方案,该解决方案独立于您安装的语言环境。 – mav