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