更改脚本中的区域设置

更改脚本中的区域设置

bc我制作了一个脚本,使用和进行一些数学运算printf

它在cygwinlocale 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在计算之后和打印之前进行。或者,您可以选择仅在脚本中的某些命令前添加每个命令设置的前缀。


  1. 某些平台对 C 语言环境的 UTF-8 版本的拼写不同(不同的大小写和/或 中缺少连字符UTF-8)。一个更加独立于平台的版本是:

     export LC_ALL=$(locale -a|grep -ix 'c.utf-\?8' || echo C)
    

相关内容