Bash 为什么在awk中转义单引号不起作用

Bash 为什么在awk中转义单引号不起作用,bash,quotes,Bash,Quotes,您好,我正在努力理解为什么以下各项不起作用: awk 'BEGIN{ print "it\'s my life" }' awk'开始{打印“这是我的生活”} 我知道,只要第一个单引号在BEGIN之前打开,它就会搜索一个结束单引号,通常在}之后找到它。然而,在我的示例中,我想打印一些带有另一个单引号的内容。因为它将中断SHELL的第一个和最后一个单引号的打开和关闭,我需要做一些事情,所以我逃避了它,它不起作用。我看到了这个答案 但我不明白为什么。谢谢。我的两个首选选项: ⒈ 对机柜使用双引号 ⒉

您好,我正在努力理解为什么以下各项不起作用:

awk 'BEGIN{ print "it\'s my life" }' awk'开始{打印“这是我的生活”} 我知道,只要第一个单引号在BEGIN之前打开,它就会搜索一个结束单引号,通常在}之后找到它。然而,在我的示例中,我想打印一些带有另一个单引号的内容。因为它将中断SHELL的第一个和最后一个单引号的打开和关闭,我需要做一些事情,所以我逃避了它,它不起作用。我看到了这个答案
但我不明白为什么。谢谢。

我的两个首选选项:

⒈ 对机柜使用双引号 ⒉ 使用heredoc
awk,因为shell不支持单引号内的转义。但是请注意,
bash
确实提供了一个很好的机制:
awk$'BEGIN{print“it's my life”}
只需在开头
'
之前加上
$
即可启用所需的转义。@williampersell但您必须小心,因为这样它会扩展转义序列,比如
\n
,通常应该直接传递给
awk
,所以你必须写
\\n
@williampersell你可以把它作为链接问题的答案。@john注意到
awk
与此无关:
echo'BEGIN{print“这是我的生活”
(本声明也如此)
awk "BEGIN{ print 'it\'s my life' }"
awk <<-DONE
BEGIN{
    print "it's my life"
}
DONE