Tôi đã bắt gặp một tập lệnh Bash ngày hôm nay có tên hàm với hai dấu hai chấm ::
trong đó, ví dụ, file::write()
và file::read()
. Tôi chưa bao giờ thấy cú pháp này trước đây trong một tập lệnh Bash và khi tôi gọi tập lệnh này, nó chạy rất tốt (thật ngạc nhiên).
Sau khi quét trang người đàn ông của Bash trên hệ thống của tôi (và trực tuyến), tôi không thể tìm thấy bất cứ điều gì trong tài liệu hỗ trợ cú pháp này cho tên hàm. Ví dụ, phần Shell Defined Functions
định nghĩa cú pháp cho hàm shell là
function name [()] compound-command [redirection]
và sau đó (ở nơi khác trong hướng dẫn sử dụng) mã thông báo name
được xác định là
name A word consisting only of alphanumeric characters and
underscores, and beginning with an alphabetic character
or an underscore. Also referred to as an identifier.
Không có đề cập đến bất cứ nơi nào của cú pháp dấu hai chấm cho tên hàm.
Tài liệu tham khảo khác về cú pháp dấu hai chấm mà tôi đã tìm thấy cho đến nay là trong Hướng dẫn kiểu Shell này (xem phần phụ Naming Conventions > Function Names
) khuyến nghị sử dụng cú pháp dấu hai chấm cho tên hàm trong "gói" - ví dụ : mypackage::myfunction()
.
Đây có phải là cú pháp dấu hai chấm cho tên hàm là một tính năng hợp pháp của shell Bash hay có lẽ nó là một tính năng không có giấy tờ? Nếu nó hợp pháp, nó được ghi lại trong tài liệu hướng dẫn Bash ở đâu? Tôi đã nhìn và nhìn nhưng tôi không thể tìm thấy bất cứ điều gì về nó trong hướng dẫn. Tôi đã tìm thấy gần nhất là việc sử dụng ::
trong PATH
biến môi trường để thêm thư mục làm việc hiện tại để con đường tìm kiếm.
THÍ DỤ
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Tôi đã thử nghiệm tập lệnh này trên ba bản phân phối Linux khác nhau và trên cả ba tập lệnh được in abc::def
ra thiết bị xuất chuẩn.
%%
trong tên hàm unix.stackexchange.com/questions/401166/ Kẻ