bc
我制作了一个脚本,使用和进行一些数学运算printf
。
它在cygwin
locale is下运行良好en_US.UTF-8
,但是当我在 linux (which locale is) 下运行它时en_ES.UTF-8
,它失败了,因为它用作,
小数分隔符。例如下一个表达式失败:
avg=$(printf %.2f $(echo "scale=4; $val1/$val2" | bc -l ))
我找到了解决方案。在脚本之前添加LC_ALL=C.UTF8
:
LC_ALL=C.UTF8 ./script.sh [OPTIONS]
不过,我认为最好不要这样做。
所以,我的问题:有没有办法只在脚本内部更改区域设置,以避免此类问题,无论用户配置文件中设置的区域设置如何?
答案1
在脚本内部,只需export LC_ALL=C.UTF-8
在开头加 1(就在 shebang 行之后,如果有的话)。
那么,该脚本执行的所有命令都会继承LC_ALL
.
如果您需要脚本的一部分不受区域设置更改的影响,但需要部分脚本尊重区域设置(例如,如果您要计算然后打印一些值),则可能需要unset LC_ALL
在计算之后和打印之前进行。或者,您可以选择仅在脚本中的某些命令前添加每个命令设置的前缀。
某些平台对 C 语言环境的 UTF-8 版本的拼写不同(不同的大小写和/或 中缺少连字符
UTF-8
)。一个更加独立于平台的版本是:export LC_ALL=$(locale -a|grep -ix 'c.utf-\?8' || echo C)