假设我有几个浮点数要在bash脚本中打印。
但我希望浮点数与
LC_NUMERIC
语言环境变量。
#!/usr/bin/env bash
# For consistent/reproducible error messages in this sample code
LANGUAGE=C
# The speed of light in vacum in m.s
declare -r const_C=299792458
# Declare separately when assigning command output
declare -- const_pi
# Ï is 4 Ã arc-tangent of 1, using bc calculator with math library
typeset -r const_pi="$(bc --mathlib <<<'scale=20; 4*a(1)')"
# 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' \
"${const_C}" \
"${const_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' \
"${const_C}" \
"${const_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 29: printf: 3.14159265358979323844: invalid number
Ïâ3,0000000000
这是一个完美的预期结果,因为
printf
%f
格式要求参数的格式根据
LC U数字
.
那么如何显示存储在posix或
bc
的格式,但显示的内容反映了
LC U数字
是吗?
如果我想要法文部分的代码,有以下输出呢?
法语的预期产出:
La vitesse de la lumière dans le vide estâ¯:
C=299792458 m/s
Ïâ3,1415926536