カンマで区切られた数字のUNIX減算

カンマで区切られた数字のUNIX減算

シェルの変更があるかどうか、またどのように機能するかを知るために助けを探しています。私たちは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ロケールでは、カンマ演算子、および12345区切られた3つの数字です。これは、デフォルトでは、一番右の値を除くすべての値を破棄します。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 はロケールに従って数値を解釈しないように見えるため、カンマは常にカンマ演算子として解釈されます。

関連情報