【问题标题】:why escaping single quote inside awk is not working为什么在 awk 中转义单引号不起作用
【发布时间】:2023-12-07 11:08:01
【问题描述】:

您好,我想了解为什么以下方法不起作用:

awk 'BEGIN{ print "这是我的生活" }'

我知道,只要第一个单引号在 BEGIN 之前打开,它就会搜索通常在 } 之后找到的右单引号。但是在我的示例中,我想打印带有另一个单引号的东西。因为它将中断第一个和最后一个单引号的 SHELL 的打开和关闭,我需要做一些事情,所以我将其转义,它不起作用。我看到了这个答案 How to escape a single quote inside awk 但我不明白为什么。谢谢。

【问题讨论】:

  • 因为shell不支持在单引号内转义。
  • 但请注意 bash 确实提供了一个很好的机制:awk $'BEGIN{ print "it\'s my life" }' 只需在开头 ' 之前加上 $ 即可启用您想要的转义。
  • @WilliamPursell 但是你必须小心,因为那样它会扩展像\n这样的转义序列,通常应该按字面意思传递给awk,所以你必须写\\n跨度>
  • @WilliamPursell 您可以将其作为链接问题的答案发布。
  • @john 注意awk 与此处无关:echo 'BEGIN{ print "it\'s my life" }'(此语句也是如此)

标签: bash quotes


【解决方案1】:

我的两个首选:

⒈ 使用双引号括起来

awk "BEGIN{ print 'it\'s my life' }"

⒉ 使用heredoc

awk <<-DONE
BEGIN{
    print "it's my life"
}
DONE

【讨论】: