O awk não funciona quando está entre aspas duplas

11

Este comando não funciona:

ssh $HOST "ls -l | awk '{print $1}'"`

Acima ignora o comando awk. Eu acho que pode ser por causa das aspas duplas?

Além disso, como eu adicionaria outro conjunto de aspas duplas dentro do awk?

ou seja:

ssh $HOST "awk '{print $1 "*"}' /some_file"

Tentei escapar das aspas, até tentei o seguinte:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"

sem sucesso.

usuario
fonte

Respostas:

19

A interpolação variável é realizada entre aspas duplas, então aqui está o que eu acho que pode estar acontecendo: quando você digita ssh $HOST "ls -l | awk '{print $1}'", seu shell (aquele no seu computador local, onde você está executando o cliente SSH) vê $1entre aspas duplas e o substitui pelo valor da variável $1, que ficará em branco. Não é possível detectar que $1está aninhado entre aspas simples nas aspas duplas. Então, o que acaba sendo enviado para o servidor remoto é

ls -l | awk '{print }'

que é basicamente equivalente a

ls -l | cat

ou seja, apenas imprime a saída de ls -l.

Solução: escape do $com uma barra invertida,

ssh $HOST "ls -l | awk '{print \$1}'"
David Z
fonte
Haha, isso foi tão simples! Eu apenas olhei através dele! Isso fez exatamente o que eu queria. ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'" Muito obrigado!
Nick