POSIXシェルスクリプトがあるとしましょう。
- 私が制御できない他のシステム/環境で実行する必要があります。
- ロケール尊重プログラムからエクスポートされた文字列から小数点区切り文字を削除する必要があります。
最も一般的な方法で小数点区切りを検出する方法は?
答え1
尋ねるlocale
:
locale decimal_point
現在のロケールを使用して小数点を出力します。
千単位の区切り記号が必要な場合:
locale thousands_sep
リクエストすると、すべての数値キーワードを表示できます。LC_NUMERIC
カテゴリー:
locale -k LC_NUMERIC
答え2
これがシェルスクリプトの場合は、モジュールで特別な連想配列を使用zsh
できます。$langinfo
zsh/langinfo
zmodload zsh/langinfo
radix=$langinfo[RADIXCHAR]
(標準にマップされていますnl_langinfo(RADIXCHAR)
、man nl_langinfo
詳細についてはシステムを参照してください。$langinfo[THOUSEP]
千単位の区切り記号はそのシステムを参照してください。)
組み込みコマンドを使用して、別のプロセスをフォークすることなくこれを取得できますbash
。zsh
printf
printf -v radix %.1f 1 && radix=${radix:1:1}
ksh93シェルを使用して数値をユーザーロケール形式からCロケール形式に変換するには、次の手順を実行できます。
$ locale title
German locale for Germany
$ x=1.123.456,78 ksh -c 'typeset -F x="$x"; LC_ALL=C; printf "%.23g\n" "$x"'
1123456.78