如何在bash中更改printf命令中的小数点分隔符?

Fer*_*isi 16 bash printf

我使用Cygwin的意大利语本地化,因此我的printf命令使用逗号分隔浮点数,并且不理解以点分隔的浮点数

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

$ printf "%f" 3,1415
3,141500
Run Code Online (Sandbox Code Playgroud)

这会产生一些问题,因为基本上其他所有东西都使用点来分隔十进制数字.

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

Fer*_*isi 18

有几个局部变量可以控制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=
Run Code Online (Sandbox Code Playgroud)

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

$ export LC_NUMERIC="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

只需将变量LC_NUMERIC设置为常规变量就不起作用,您需要使用export命令.

您可以将其放在脚本的标题中,也可以将其添加到您~/.bashrc或您的脚本中~/.bash_profile

希望这有用!


jes*_*her 7

如果您不想搞乱系统配置,可以尊重您的语言环境,但要确保您的脚本使用小数点:

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

$ LANG=C printf "%f" 3.5
3.500000
Run Code Online (Sandbox Code Playgroud)

  • 有些情况下`LANG = C`是不够的,`LC_NUMERIC = C`效果更好. (3认同)