Você deve escapar o sinal $
:
$ sh -c "echo 123 | awk '{print \ 456}'"
123456
Caso contrário, $1
é expandido pelo shell atual.
Encontrei alguma anomalia ao escrever um script.
Os exemplos a seguir funcionam conforme o esperado:
$ echo 123 | awk '{print $1 456}'
123456
$ sh -c "echo 123 | awk '{print $1}'"
123
Mas o seguinte exemplo não:
$ sh -c "echo 123 | awk '{print $1 456}'"
456
Espero imprimir a primeira coluna com a string adicional, que deve retornar 123456
, como ocorre ao executar o mesmo comando sem sh -c
. Mas o que está acontecendo, a primeira coluna é ignorada por algum motivo. O que é interessante, $1
é impresso sem problemas quando não está executando a concatenação de strings.
Por que isso está acontecendo e como fazer a concatenação de strings dentro do comando que é passado para uma instância separada do shell?