Shell
目前的小數分隔符是哪個?
假設我有一個 POSIX shell 腳本
- 需要在我無法控制的不同系統/環境上執行,並且
- 需要從尊重語言環境設置的程序發出的字元串中刪除小數點分隔符。
如何以最一般的方式檢測小數分隔符?
問
locale
:locale decimal_point
這將使用目前的語言環境設置輸出小數點。
如果您需要千位分隔符:
locale thousands_sep
您可以通過
LC_NUMERIC
請求類別查看所有數字關鍵字:locale -k LC_NUMERIC
如果那是一個
zsh
shell 腳本,你可以在模組中使用$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}
要將數字從使用者的語言環境格式轉換為 C 語言環境格式,使用 ksh93 shell,您可以這樣做:
$ 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