我已经尝试定义千位分隔符有printf
一段时间了,我发现 zsh 有一些问题。
在 bash 中我可以使用类似的东西:
$ printf "%'d\n" 1234567890
1,234,567,890
但在 zsh 中它不起作用:
$ printf "%'d\n" 1234567890
printf: %': invalid directive
我刚刚发现 coreutilsprintf
可以很好地做到这一点:
$/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}