Shell

目前的小數分隔符是哪個?

  • May 12, 2021

假設我有一個 POSIX shell 腳本

  1. 需要在我無法控制的不同系統/環境上執行,並且
  2. 需要從尊重語言環境設置的程序發出的字元串中刪除小數點分隔符。

如何以最一般的方式檢測小數分隔符?

locale

locale decimal_point

這將使用目前的語言環境設置輸出小數點。

如果您需要千位分隔符:

locale thousands_sep

您可以通過LC_NUMERIC請求類別查看所有數字關鍵字:

locale -k LC_NUMERIC

如果那是一個zshshell 腳本,你可以在模組中使用$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

引用自:https://unix.stackexchange.com/questions/541342