나는 한동안 수천 개의 구분 기호를 정의하려고 노력해 왔으며 printf
zsh에서 몇 가지 문제를 발견했습니다.
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
수천 개의 그룹화에 대한 기본 지원 지원(토론 참조)'
bash
coreutils
printf
여기).
천 단위 구분 기호는 다음과 같습니다.zsh에서 지원되지 않는 GNU 확장, 그리고 최종적으로 사용할 자체 printf
내장 기능이 있습니다. 링크된 기사에서 언급했듯이 다음을 통해 로케일에 따른 천 단위 구분 기호를 얻을 수 있습니다.
zmodload zsh/langinfo
echo $langinfo[THOUSEP]
zsh를 구체적이고 독점적으로 사용해야 하는 경우 sed와 함께 사용할 수 있습니다.
내장되지 않은 것을 사용하는 것이 더 쉬울 수도 있습니다.printf
GNU 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}