【问题标题】:awk not working when used with /bin/bash -c与 /bin/bash -c 一起使用时,awk 不起作用
【发布时间】:2021-07-10 19:48:42
【问题描述】:

这会正确打印test

$ echo 'this is a test' | awk '{print $4}'
test

/bin/bash -c 中使用此命令不起作用

/bin/bash -c "echo 'this is a test' | awk '{print $4}'"
this is a test

/bin/bash -c 一起使用时,如何让awk 正常工作?

【问题讨论】:

  • 是的:/bin/bash -c "echo 'this is a test' | awk '{print \$4}'"
  • 注意:您需要转义$。生病搜索重复;)
  • @anubhava Phh,某种阅读障碍? 'this' !== 'test'....谢谢你的叫醒服务。
  • 另外,dupe 只谈论 bash -c,但 OP 也在询问 awk,并且该 dupe 没有解释为什么 OP 的输出是完整的。

标签: bash awk sh


【解决方案1】:

$4 被 shell 消耗,因为你有双引号的命令字符串。

您可以通过在bash 命令行中添加-x 来检查跟踪输出:

bash -xc "echo 'this is a test' | awk '{print $4}'"
+ echo 'this is a test'
+ awk '{print }'
this is a test

由于$4 扩展为一个空字符串,它有效地运行awk '{print }',因此完整的行被打印在输出中。

要解决这个问题,您应该使用转义的$ 来避免这种扩展:

bash -c "echo 'this is a test' | awk '{print \$4}'"
test

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多