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