Awk funktioniert nicht in doppelten Anführungszeichen

11

Dieser Befehl funktioniert nicht:

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

Oben ignoriert der Befehl awk. Ich denke, es könnte an den doppelten Anführungszeichen liegen?

Wie würde ich einen weiteren Satz doppelter Anführungszeichen in die awk einfügen?

dh:

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

Ich habe versucht, den Zitaten zu entkommen, ich habe sogar Folgendes versucht:

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

ohne Erfolg.

Nick
quelle

Antworten:

19

Die variable Interpolation wird in doppelten Anführungszeichen durchgeführt. Ich denke also, dass Folgendes passiert: Wenn Sie eingeben ssh $HOST "ls -l | awk '{print $1}'", sieht Ihre Shell (die auf Ihrem lokalen Computer, auf dem Sie den SSH-Client ausführen) $1die doppelten Anführungszeichen und ersetzt sie durch die Wert der Variablen $1, die leer sein wird. Es ist nicht möglich zu erkennen, dass das $1in einfachen Anführungszeichen innerhalb der doppelten Anführungszeichen verschachtelt ist. Was also auf den Remote-Server gesendet wird, ist

ls -l | awk '{print }'

das ist im Grunde gleichbedeutend mit

ls -l | cat

dh es druckt nur die Ausgabe von aus ls -l.

Lösung: Entfliehen Sie dem $mit einem Backslash,

ssh $HOST "ls -l | awk '{print \$1}'"
David Z.
quelle
Haha, das war so einfach! Ich habe es einfach durchgesehen! Das hat genau das gemacht, was ich wollte. ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'" Vielen Dank!
Nick