Para o primeiro
$ awk '{print "me "$0 '"notme"} <<<"printme"
O que está acontecendo aqui é:
- A parte entre aspas simples é passada para
awk
verbatim - A próxima parte
"notme"}
é analisada pelo shell e depois passada paraawk
como a string resultantenotme}
-
awk
consegue ver isto:{print "me "$0 notme}
Como o
awk
variablenotme
não tem valor, é isso que você obtém
Para o segundo
$ awk '{print "me "$0 '"\"$(date)"\"} <<<"printme-at " me printme-at Wed Apr 11 16:41:34 DST 2018
Eu estaria mais inclinado a escrevê-lo assim, usando uma variável awk
para carregar o valor de $(date)
:
awk -v date="$(date)" '{print "me "$0 date}' <<<"printme-at "
me printme-at Wed Apr 11 13:43:31 BST 2018
Você perguntou por que não há erro de sintaxe na sua versão deste. Vamos desmontar:
# typed at the shell
awk '{print "me "$0 '"\"$(date)"\"} <<<"printme-at "
# prepared for awk
awk '{print "me "$0 "Wed Apr 11 16:41:34 DST 2018"}' <<<"printme-at "
# seen by awk
{print "me "$0 "Wed Apr 11 16:41:34 DST 2018"}
A string com aspas duplas "\"$(date)\""
é analisada pelo shell antes de awk
chegar perto dele e é avaliada (pelo shell) como algo como a string literal "Wed Apr 11 13:43:31 BST 2018"
(incluindo as aspas duplas) . Não vejo por que precisa haver um erro de sintaxe, pois o que você escreveu é válido - embora um pouco tortuoso para ser lido.