Awk non funziona se racchiuso tra virgolette doppie


11

Questo comando non funziona:

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

Sopra ignora il comando awk. Penso che potrebbe essere a causa delle doppie virgolette?

Inoltre, come aggiungerei un'altra serie di virgolette doppie all'interno di Awk?

vale a dire:

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

Ho provato a sfuggire alle virgolette, ho anche provato questo:

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

senza successo.

Risposte:


19

L'interpolazione delle variabili viene eseguita tra virgolette doppie, quindi ecco cosa penso possa accadere: quando si digita ssh $HOST "ls -l | awk '{print $1}'", la shell (quella sul computer locale, dove si esegue il client SSH) vede $1tra virgolette doppie e la sostituisce con la valore della variabile $1, che sarà vuota. Non è in grado di rilevare che $1è nidificato tra virgolette singole tra virgolette doppie. Quindi ciò che finisce per essere inviato al server remoto è

ls -l | awk '{print }'

che è sostanzialmente equivalente a

ls -l | cat

cioè stampa semplicemente l'output di ls -l.

Soluzione: sfuggire $a una barra rovesciata,

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

Haha, è stato così semplice! Ho appena guardato attraverso! Questo ha fatto esattamente quello che volevo. ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'" Grazie mille!
Nick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.