让我们说我要在Bash脚本中打印几个浮点数。
但是我希望根据LC_NUMERIC
语言环境环境变量显示浮点数。
#!/usr/bin/env bash
declare -r light_speed=299792458
declare -r pi=3.1415926535897932384626433
# Do it in US's English
LC_NUMERIC=en_US.UTF8
printf 'LC_NUMERIC=%s\n' "${LC_NUMERIC}"
printf 'Speed of light in vacuum is:\nC=%.f m/s\n\nπ=%.10f\n' \
"${light_speed}" \
"${pi}"
echo $'\n'
# Do it in France's French
# it fails because floating point format
# changes for printf parameters
LC_NUMERIC=fr_FR.UTF8
printf 'LC_NUMERIC=%s\n' "${LC_NUMERIC}"
printf 'La vitesse de la lumière dans le vide est :\nC=%.f m/s\n\nπ≈%.10f\n' \
"${light_speed}" \
"${pi}"
输出:
LC_NUMERIC=en_US.UTF8
Speed of light in vacuum is:
C=299792458 m/s
π≈3.1415926536
LC_NUMERIC=fr_FR.UTF8
La vitesse de la lumière dans le vide est :
C=299792458 m/s
a.sh: line 20: printf: 3.1415926535897932384626433: invalid number
π≈3,0000000000
这是一个完美的预期结果,因为printf
%f
格式期望参数根据LC_NUMERIC
进行格式化。
然后,如何显示以POSIX或bc
格式存储的任意浮点数,但显示时却反映了LC_NUMERIC
的设置?
如果我想要代码的法语部分,并显示以下输出,怎么办?
La vitesse de la lumière dans le vide est :
C=299792458 m/s
π≈3,1415926536
答案 0 :(得分:4)
这是Bash自己内置的printf命令的问题。独立的printf可以正常工作。
LC_NUMERIC=fr_FR.UTF8 printf 'Bad : %f\n' 3.14
env LC_NUMERIC=fr_FR.UTF8 printf 'Good : %f\n' 3.14
输出
script.sh: line 4: printf: 3.14: invalid number
Bad : 0,000000
Good : 3,140000