【问题标题】:Unable to print newline inside xargs无法在 xargs 中打印换行符
【发布时间】:2020-10-19 03:23:45
【问题描述】:

我正在编写一些脚本来帮助组织一些东西。我已将我的代码从我的原始代码简化为:

$ echo $(find -type d -maxdepth 5 | grep -E "\./([^/])*/([^/])*/([^/])*/([^/])*"
 | cut -d'/' -f 3 | sort | uniq -d | xargs -I R sh -c 'echo -e "alpha \n"')
(R actually doesn't do anything here but it's used in the original)

特别是,我认为我的 xargs 有问题

xargs -I R sh -c 'echo -e "alpha \n"'

我希望看到alpha 被打印多次,每次都在换行符上。但是,我的输出看起来像

alpha alpha alpha...

我一直在互联网上搜索,试图找到解决此问题的方法,但没有用。我刚刚开始尝试使用 bash,有人可以指出我做错了什么吗?

【问题讨论】:

  • 你为什么要把整个东西都包在echo $(...)中?这使您受制于I just assigned a variable, but echo $variable shows something else
  • 查尔斯,你可能只是个救命恩人。我可能一直在试图解决错误的事情
  • ... 不过,这并不是说您的 xargs 使用是正确的。不过,我现在不在电脑前测试它或任何建议的替代品。
  • sh -c 'echo -e "alpha \n"' 无法工作,因为echo -e 不是 POSIX,而您正在调用 POSIX sh。请改用sh -c 'printf "%s \n\n" "alpha"'
  • @user1934428 这就是为什么它是评论而不是答案的原因。至于为什么我推荐printf 而不是echo 特别是在转义特殊字符时,这里是:stackoverflow.com/q/64079604/7939871

标签: bash echo newline xargs


【解决方案1】:

这是I just assigned a variable, but echo $variable shows something else 的一个特例。


只是运行一个命令,没有echo

$ printf '%s\n' "first line" "second line"
first line
second line

在不带引号的命令替换中运行命令,因为您的代码当前是编写的:

$ echo $(printf '%s\n' "first line" "second line")
first line second line

在引用的命令替换中运行命令:

$ echo "$(printf '%s\n' "first line" "second line")"
first line
second line

...so:如果你没有理由外部echo $(...),只需将其删除;如果您确实有理由,请添加引号。

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多