シェルの変更があるかどうか、またどのように機能するかを知るために助けを探しています。私たちはkshを使います。
1日間コマンドを実行しましたが、数週間後に同じコマンドが実際のマイナス値を返しましたa=12,345,789; b=200; echo $(($a-$b))
。589
12345589
ありがとう
答え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
区切られた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 はロケールに従って数値を解釈しないように見えるため、カンマは常にカンマ演算子として解釈されます。