zshのprintfの1000単位区切り記号

zshのprintfの1000単位区切り記号

私はしばらくの間に何千もの区切り文字を定義しようとしましたが、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機能があります。リンクされた記事で述べたように、ロケールに応じて1000単位の区切り文字を取得できます。

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}

関連情報