UNIX 逗号分隔数字的减法

UNIX 逗号分隔数字的减法

寻求帮助以了解是否有任何 shell 更改或它是如何工作的..我们使用 ksh。

我执行了一个命令 1 天,但几周后,相同的命令返回了实际减去的值,a=12,345,789; b=200; echo $(($a-$b))即。58912345589

谢谢

答案1

ksh 中的解释12,345,789似乎取决于区域设置:

$ LC_NUMERIC=C ksh -c 'a=12,345,789; b=200; echo $(($a-$b))'
589
$ LC_NUMERIC=en_US.UTF-8 ksh -c 'a=12,345,789; b=200; echo $(($a-$b))'
12345589

在 C 语言环境中,它是由逗号运算符分隔的三个数字12, 345, 和,这基本上只是丢弃除了最右边的值之外的所有值。789显然,在en_US.UTF-8我的机器上的区域设置中,逗号充当千位分隔符,因此它是单个数字12345789

另一方面,在fi_FI.UTF-8输入的区域设置中会导致错误“ksh: 12,345,789-200: 算术语法错误”,但删除一个逗号会使数字被接受,这次作为小数分隔符:

$ LC_NUMERIC=fi_FI.UTF-8 ksh -c 'a=12,345; b=200; echo $(($a - $b))'
-187,655

请注意,例如 Bash 似乎不会根据区域设置解释数字,因此逗号总是被解释为逗号运算符。

相关内容