O programa awk aguardará a entrada e, para cada linha de entrada, imprimirá a palavra foo . É isso que o awk program { print "foo" } faz.
Por outro lado, echo , na primeira substituição de comando, não espera pela entrada.
Você deseja que um programa awk apenas imprima algo, sem nenhuma entrada, faça a saída em um bloco BEGIN :
awk 'BEGIN { print "foo" }'
O bloco BEGIN é executado antes de ler a primeira linha de entrada e, como não há outros blocos no script e nenhum arquivo de entrada, ele será encerrado.
Além disso, nunca escreva código como echo $( ... ) ou echo ' ... ' , apenas use o código dentro da substituição do comando.