Awk không hoạt động khi bên trong dấu ngoặc kép


11

Lệnh này không hoạt động:

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

Ở trên bỏ qua lệnh awk. Tôi nghĩ rằng nó có thể là do dấu ngoặc kép?

Ngoài ra, làm thế nào tôi có thể thêm một bộ dấu ngoặc kép bên trong awk?

I E:

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

Tôi đã cố gắng thoát khỏi dấu ngoặc kép, tôi thậm chí đã thử điều này:

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

không thành công.

Câu trả lời:


19

Nội suy biến được thực hiện trong dấu ngoặc kép, vì vậy đây là điều tôi nghĩ có thể xảy ra: khi bạn nhập ssh $HOST "ls -l | awk '{print $1}'", shell của bạn (cái trên máy tính cục bộ của bạn, nơi bạn đang chạy ứng dụng khách SSH) nhìn thấy $1trong dấu ngoặc kép và thay thế nó bằng dấu ngoặc kép giá trị của biến $1, sẽ trống. Không thể phát hiện ra rằng cái $1được lồng trong dấu ngoặc đơn trong dấu ngoặc kép. Vì vậy, những gì kết thúc nhận được gửi đến máy chủ từ xa là

ls -l | awk '{print }'

về cơ bản là tương đương với

ls -l | cat

tức là nó chỉ in ra đầu ra của ls -l.

Giải pháp: thoát khỏi $dấu gạch chéo ngược,

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

Haha, thật đơn giản! Tôi chỉ nhìn qua nó! Điều này đã làm chính xác những gì tôi muốn. ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'" Cảm ơn rất nhiều!
Nick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.