bí danh so với chức năng trong tập lệnh bash


11

Tôi muốn biết sự khác biệt giữa các bí danh và các hàm trong bash shell - và khi nào nên sử dụng cái nào.

Rõ ràng là vì các chức năng có thể tranh luận, chúng mạnh hơn rất nhiều - vì tôi làm việc chủ yếu trên đường với netbook và muốn tiết kiệm năng lượng và năng lượng xử lý, tôi đặc biệt muốn biết thêm một chút về sự khác biệt hiệu năng Hai cách này để mở rộng chức năng bash là.


1
Không cần phải tự hạ mình. Nếu câu hỏi của bạn không muốn, nó sẽ bị đánh giá thấp. Và nếu ai đó muốn bạn làm rõ câu hỏi của bạn, anh ta sẽ nói như vậy trong một bình luận. Và cấm mọi người chỉnh sửa bài viết của bạn là loại thiếu điểm. Trang web này được thiết kế cho mọi thứ có thể chỉnh sửa cho mọi người.
k0pernikus

Tôi đã không cố gắng ngăn cấm, nhưng chỉ vui lòng yêu cầu cho tôi cơ hội để làm rõ nếu họ thấy cần thiết. Tôi đã có kinh nghiệm hỏi những câu hỏi rất đơn giản về các chủ đề mà tôi biết ít, và sau đó mọi người nghĩ rằng nó hoàn toàn rõ ràng Tôi đang hỏi về một điều gì đó phức tạp hơn và sửa cho tôi về cách tôi không biết cách hỏi những gì tôi muốn . Tất nhiên một trong những lợi thế lớn của nền tảng này là thực tế nó có thể chỉnh sửa được bởi các đồng nghiệp, tôi đã không cố làm suy yếu điều đó. Cảm ơn phản hồi của bạn, khiến tôi suy nghĩ :)
MaxAxeHax

Trang web chéo có thể trùng lặp của: unix.stackexchange.com/questions/30925/ory
Ciro Santilli

Câu trả lời:


10

Hãy nghĩ về bí danh như biệt danh. Bạn có thể có một lệnh mà bạn thực hiện rất nhiều nhưng muốn rút ngắn.

Ví dụ, bạn thường muốn đi thẳng đến máy tính để bàn trong dòng lệnh, vì vậy bạn có thể làm điều này

alias desktop="cd ~/Desktop"

Từ đó bạn chỉ cần gõ

desktop

trong thiết bị đầu cuối và nó sẽ thực hiện cd ~/Desktopcho bạn.

Hàm chứa logic. Trong một chức năng, bạn có thể thực hiện cuộc gọi đến một số chương trình khác nhau. Đây là một chức năng echo đơn giản

function e {
                echo $1 
                echo $1 $1
                echo $1 $1 $1                 
           }  

Mặc dù nó có thể xuất hiện tương tự như bí danh khi bạn gọi nó

e Hello

E () của bạn có thể có rất nhiều điều khác nhau xảy ra. Trên đây là một ví dụ đơn giản.

Bí danh nên được dành riêng cho các trường hợp sử dụng đơn giản. Ví dụ cá nhân - Tôi đã thay thế rmlệnh của mình như thế này

alias rm='trash-put'

Bất cứ khi nào tôi làm một rm, nó sẽ gửi nó vào thùng rác thay vì xóa nó khỏi đĩa. Điều này phục vụ cho sự vụng về của tôi trong thiết bị đầu cuối nơi tôi có thể (đôi khi) vô tình xóa một tệp quan trọng.

Các chức năng , bạn cần nhớ, là những phần của logic. Bạn sẽ không sử dụng một chức năng độc lập, thường. Nó sẽ là một phần của một kịch bản lớn hơn. Hãy tưởng tượng một tập lệnh lấy tất cả các tệp của bạn và đổi tên chúng thành phiên bản tiếng Latin của chúng. Bỏ qua rằng có nhiều cách khác nhau để làm điều đó.

Nhưng những gì bạn có thể làm là lặp qua mọi tệp trong thư mục và truyền filepath cho hàm RenameAsPigLatin của bạn. Hàm RenameAsPigLatin có thể có thêm logic trong đó liên quan đến các số, trong đó bạn quyết định rằng các tệp kết thúc bằng số không nên được đổi tên.

Ngay lập tức bạn có thể thấy lợi ích của việc có nó như là một chức năng. Hàm có thể tập trung vào việc đổi tên theo các quy tắc lạ của bạn trong khi phần còn lại của tập lệnh có thể duyệt qua các thư mục khác nhau khi cần thiết.


2
Theo tôi, có nhiều lý do để sử dụng các chức năng độc lập. Trong thực tế, tôi có một số hàm được định nghĩa cùng với các bí danh của tôi. Ví dụ: tôi đã thay thế cd bằng một chức năng cùng tên để tôi có thể tự động thực hiện một ls sau mỗi cd mà không bị mất bất kỳ chức năng nào. Điều này không thể được thực hiện với một bí danh vì nó đòi hỏi một chút logic.
Scott Severance

3

Bí danh là một phím tắt đơn giản được sử dụng trong bảng điều khiển để tránh nhập các lệnh dài hoặc luôn lặp lại các tùy chọn tương tự.

Một ví dụ cổ điển sẽ là:

alias ll='ls -l'

Bí danh chỉ hoạt động trong một bảng điều khiển tương tác, chúng không có nghĩa là được sử dụng trong các tập lệnh.

Chức năng có thể được sử dụng trong các tập lệnh hoặc trong bảng điều khiển, nhưng thường được sử dụng trong các tập lệnh.

Trái với bí danh, chỉ được thay thế bằng giá trị của chúng, một hàm sẽ được giải thích bởi bash shell.

Chức năng mạnh hơn nhiều so với bí danh, chúng có thể được sử dụng để xây dựng các chương trình rất phức tạp.

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.