【发布时间】:2023-12-16 12:44:02
【问题描述】:
我正试图理解这个简单示例(zsh 或 bash)有什么问题:
echo -n "6842" | printf "%'d"
输出是0...为什么?我希望输出为6,842
在此先感谢,我已经有一个小时没有运气了,现在使用谷歌试图解决这个问题......!
【问题讨论】:
我正试图理解这个简单示例(zsh 或 bash)有什么问题:
echo -n "6842" | printf "%'d"
输出是0...为什么?我希望输出为6,842
在此先感谢,我已经有一个小时没有运气了,现在使用谷歌试图解决这个问题......!
【问题讨论】:
printf 不会从标准输入读取参数以格式化,而是直接从命令行读取。例如,这有效:
$ printf "%'d" 6842
6,842
您可以使用命令替换将命令的输出转换为命令行参数:
$ printf "%'d" $(echo -n 6842)
6,842
如果您想在管道内调用printf,您可以使用xargs 读取输入并使用适当的参数执行printf:
echo -n "6842" | xargs printf "%'d"
【讨论】:
printf 不会格式化在标准输入上传递给它的数据;它接受一组参数,其中第一个是格式,其余的是要显示的值。
幸运的是,这正是xargs 的用途;引用手册:
xargs - 从标准输入构建和执行命令行
因此,您可以通过管道传输到xargs,并告诉它使用给定的参数为您运行printf,而不是直接通过管道传输到printf。简而言之:
echo -n "6842" | xargs printf "%'d"
【讨论】: