【问题标题】:Bash: print each input string in a new lineBash:在新行中打印每个输入字符串
【发布时间】:2013-06-16 06:46:21
【问题描述】:

使用xargs,我给echo 几个字符串打印。有没有办法在换行中显示每个给定的字符串?

find . something -print0 | xargs -r0 echo

我确信这非常简单,但显然我找不到正确的关键词来谷歌它。

【问题讨论】:

    标签: bash newline echo


    【解决方案1】:
    find . something -print0 | xargs -r0 printf "%s\n"
    

    显然,find 也可以在没有xargs 的帮助的情况下愉快地每行打印一个,但大概这只是您所追求的一部分。 -r 选项很有意义;如果没有要打印的内容,它不会运行 printf 命令,与 POSIX xargs 相比,这在 GNU xargs 中是一个有用且明智的扩展,后者始终要求命令至少运行一次。 (与 POSIX 相比,find 的 -print0 选项和 xargs 的 -0 选项也是 GNU 扩展。)

    现在最常见的是,您不需要将 xargs 与 find 一起使用,因为 POSIX find 支持 + 操作数来代替旧的 ; 到 -exec,这意味着您可以写:

    find . something -exec printf '%s\n' {} +
    

    当使用+ 时,find 会收集尽可能多的参数以方便地放在命令行中,并使用这些参数调用命令。在这种情况下,使用printf(或echo)没有多大意义,但通常,这会正确处理参数,每个文件名一个参数,即使文件名包含空格、制表符、换行符、和其他尴尬的角色。

    【讨论】:

    • 谢谢!是的,它只是我试图放在一起的较长命令行的一部分。我编辑了原始帖子以包含-print0
    【解决方案2】:

    这是echo 获得您想要的东西的一种方式。

    find . something -print0 | xargs -r0 -n1 echo
    

    -n1 告诉 xargs 在每次调用命令时使用 1 个命令行参数(在本例中为 echo)

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 1970-01-01
      • 2020-05-20
      • 2016-06-19
      • 2023-03-21
      • 1970-01-01
      • 2017-08-01
      • 2023-03-26
      • 2022-11-19
      相关资源
      最近更新 更多