zsh의 printf에 대한 천 단위 구분 기호

zsh의 printf에 대한 천 단위 구분 기호

나는 한동안 수천 개의 구분 기호를 정의하려고 노력해 왔으며 printfzsh에서 몇 가지 문제를 발견했습니다.

Bash에서는 다음과 같은 것을 사용할 수 있습니다.

$ printf "%'d\n" 1234567890
1,234,567,890

하지만 zsh에서는 작동하지 않습니다.

$ printf "%'d\n" 1234567890
printf: %': invalid directive

나는 방금 coreutils가 printf이 작업을 매우 잘 수행한다는 것을 발견했습니다.

$/usr/bin/printf "%'d\n" 1234567890
1,234,567,890

zsh에서 천 단위 구분 기호를 사용하는 방법은 무엇입니까?

$ zsh --version
zsh 5.0.2 (x86_64-pc-linux-gnu) 

답변1

업데이트: 현재zsh v. 5.1, /와 같은 printf수천 개의 그룹화에 대한 기본 지원 지원(토론 참조)'bashcoreutils printf여기).


천 단위 구분 기호는 다음과 같습니다.zsh에서 지원되지 않는 GNU 확장, 그리고 최종적으로 사용할 자체 printf내장 기능이 있습니다. 링크된 기사에서 언급했듯이 다음을 통해 로케일에 따른 천 단위 구분 기호를 얻을 수 있습니다.

zmodload zsh/langinfo
echo $langinfo[THOUSEP]

zsh를 구체적이고 독점적으로 사용해야 하는 경우 sed와 함께 사용할 수 있습니다.

내장되지 않은 것을 사용하는 것이 더 쉬울 수도 있습니다.printfGNU coreutils에서반대로, 시스템에서 천 단위 구분 기호 옵션을 허용하는 경우:

$ command printf "%'d\n" 1234567890
1,234,567,890

command printf쉘에게 말해아니요내장 명령이나 별칭을 사용하지만 $PATH.

답변2

보충하다마이클의 대답, 연산자를 사용하여 수동으로 천 단위 서식 지정을 수행할 수 있습니다 zsh.

var=1234567

zmodload zsh/langinfo
setopt extendedglob
echo $var[1,(l=-($#var-1)/3*3)-1]${var[l,l?-1:l]//(#m)???/$langinfo[THOUSEP]$MATCH}

관련 정보