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