Cách tạo bí danh bằng lệnh chứa 'và "


10

Một vài bài viết trước đây có người hỏi làm thế nào để hiển thị bộ nhớ theo tỷ lệ phần trăm. Có người trả lời:

free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'

Tôi đã tự hỏi nếu tôi có thể biến lệnh này thành bí danh trong ~ / .bashrc. Nhưng cú pháp của bí danh là:

alias aliasname='command'

Tôi có thể làm cái này như thế nào? Lệnh đó chứa cả '". Tôi đã thử nhiều cách khác nhau nhưng không được. Điều này thậm chí có thể? Tui bỏ lỡ điều gì vậy?


5
Để tránh trích dẫn địa ngục, có thể dễ dàng hơn chỉ cần xác định một chức năng trong các trường hợp như vậy.
nohillside

1
Các chức năng @nohillside thường hữu dụng / mạnh mẽ hơn
D. Ben Knoble

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- vẫn chỉ là một dòng, không có thay đổi nào đối với trích dẫn / thoát / v.v. Có một lý do thực tế kênh fbode #bash !aliaslà (tốt, , nhưng đối với hầu hết cuộc sống của bot thực tế, một số biến thể của): Nếu bạn phải hỏi, thay vào đó hãy sử dụng một chức năng .
Charles Duffy

Câu trả lời:


8

Bạn cần:

alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'"

Lưu ý rằng bạn cần phải thoát khỏi cả hai "$.


17

Nói rằng cú pháp của một bí danh là alias aliasname='command'một chút sai lệch, vì nó dường như ngụ ý rằng các trích dẫn duy nhất là một phần của cú pháp. Họ không phải. Phần sau dấu bằng tương tự như các phép gán biến, trong đó nó có thể là bất kỳ từ vỏ nào , bao gồm các ký tự đơn giản (không có dấu ngoặc kép) hoặc chuỗi trích dẫn hoặc kết hợp.

Tất cả đều hợp lệ và ba tương đương cuối cùng:

alias ks=ls
alias ls='ls -l'
alias ls="ls -l"
alias ls=ls\ -l

Vì vậy, tất cả những gì bạn cần làm là thoát khỏi dấu ngoặc kép đúng cách để có chúng bên trong giá trị bí danh.

Xem, ví dụ câu trả lời này và các câu trả lời khác để ví dụ những câu hỏi này để thảo luận về điều đó:

Hoặc, sử dụng chức năng thay vì bí danh để loại bỏ hoàn toàn trích dẫn các vấn đề:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
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.