【问题标题】:How do I pipe into printf? [duplicate]如何通过管道输入 printf? [复制]
【发布时间】:2023-12-16 12:44:02
【问题描述】:

我正试图理解这个简单示例(zsh 或 bash)有什么问题:

echo -n "6842" | printf "%'d"

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

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

【问题讨论】:

    标签: bash pipe printf zsh


    【解决方案1】:

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

    $ printf "%'d" 6842
    6,842
    

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

    $ printf "%'d" $(echo -n 6842)
    6,842
    

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

    echo -n "6842" | xargs printf "%'d"
    

    【讨论】:

      【解决方案2】:

      printf 不会格式化在标准输入上传递给它的数据;它接受一组参数,其中第一个是格式,其余的是要显示的值。

      幸运的是,这正是xargs 的用途;引用手册:

      xargs - 从标准输入构建和执行命令行

      因此,您可以通过管道传输到xargs,并告诉它使用给定的参数为您运行printf,而不是直接通过管道传输到printf。简而言之:

      echo -n "6842" | xargs printf "%'d"
      

      【讨论】:

      • 也谢谢你,很高兴看到共识 ;)