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.

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}'"

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.