Awk tidak berfungsi ketika di dalam tanda kutip ganda

11

Perintah ini tidak berfungsi:

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

Di atas mengabaikan perintah awk. Saya pikir itu mungkin karena tanda kutip ganda?

Juga, bagaimana saya menambahkan satu set tanda kutip ganda di dalam awk?

yaitu:

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

Saya mencoba melarikan diri dari kutipan, saya bahkan mencoba ini:

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

tanpa keberhasilan.

Nick
sumber

Jawaban:

19

Interpolasi variabel dilakukan dalam tanda kutip ganda, jadi inilah yang saya pikir mungkin terjadi: ketika Anda mengetik ssh $HOST "ls -l | awk '{print $1}'", shell Anda (yang ada di komputer lokal Anda, tempat Anda menjalankan klien SSH) melihat $1di dalam tanda kutip ganda dan menggantinya dengan nilai variabel $1, yang akan kosong. Itu tidak dapat mendeteksi bahwa $1itu bersarang di dalam tanda kutip tunggal dalam tanda kutip ganda. Jadi apa yang akhirnya dikirim ke server jauh

ls -l | awk '{print }'

yang pada dasarnya setara dengan

ls -l | cat

yaitu hanya mencetak keluaran dari ls -l.

Solusi: melarikan diri $dengan backslash,

ssh $HOST "ls -l | awk '{print \$1}'"
David Z
sumber
Haha, itu sangat sederhana! Aku baru saja melihatnya! Ini melakukan persis apa yang saya inginkan. ssh $ HOST "ls-l | awk '{print \ $ 1 \" * \ "}'" Terima kasih banyak!
Nick