我如何通过管道输入 printf?
How do I pipe into printf?
我快要疯了试图理解这个简单示例(zsh 或 bash)的问题所在:
echo -n "6842" | printf "%'d"
输出是0
...为什么?我希望输出为 6,842
提前致谢,我已经用了一个小时 google 试图解决这个问题...!
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 - build and execute command lines from standard input
因此,您可以通过管道传输到 xargs
,而不是直接传输到 printf
,然后使用给定的参数告诉它到 运行 printf
。简而言之:
echo -n "6842" | xargs printf "%'d"
我快要疯了试图理解这个简单示例(zsh 或 bash)的问题所在:
echo -n "6842" | printf "%'d"
输出是0
...为什么?我希望输出为 6,842
提前致谢,我已经用了一个小时 google 试图解决这个问题...!
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 - build and execute command lines from standard input
因此,您可以通过管道传输到 xargs
,而不是直接传输到 printf
,然后使用给定的参数告诉它到 运行 printf
。简而言之:
echo -n "6842" | xargs printf "%'d"