如何通过管道输入 printf ?

Mar*_*agh 10 bash printf zsh pipe

我疯狂地试图理解这个简单示例(zsh 或 bash)的问题是什么:

echo -n "6842" | printf "%'d"
Run Code Online (Sandbox Code Playgroud)

输出是0......为什么呢?我希望输出是6,842

预先感谢,我现在使用谷歌试图解决这个问题一个小时了,但没有运气......!

use*_*342 23

printf不从标准输入读取格式参数,而是直接从命令行读取参数。例如,这有效:

$ printf "%'d" 6842
6,842
Run Code Online (Sandbox Code Playgroud)

您可以使用命令替换将命令的输出转换为命令行参数:

$ printf "%'d" $(echo -n 6842)
6,842
Run Code Online (Sandbox Code Playgroud)

如果要printf在管道内部调用,可以使用xargs读取输入并printf使用适当的参数执行:

echo -n "6842" | xargs printf "%'d"
Run Code Online (Sandbox Code Playgroud)