Những gì bạn đang hỏi không thực sự có ý nghĩa nhiều.
từ khóa có nghĩa là một từ là một phần của cú pháp của shell. Những người được công nhận thông qua tokenising. Trích dẫn chúng là đủ để vỏ ngừng nhận ra.
Có thể đặt bí danh cho một từ khóa trong hầu hết các shell. Vì vậy, các bí danh được ưu tiên hơn các từ khóa (thực tế chúng được mở rộng sớm và có nhiều mã thông báo hơn sau đó bạn có thể có nhiều bí danh, từ khóa) ...
bí danh (ngoại trừ các bí danh zsh được xác định alias -gchỉ được mở rộng ở vị trí lệnh), vì vậy thường không có trong builtin the-alias.
các hàm được ưu tiên hơn các nội dung và các nội dung trên các lệnh bên ngoài (và sau đó $PATHquyết định sử dụng hàm nào).
Bạn có thể buộc nội dung với:
builtin the-cmd and its args
(mặc dù cần lưu ý rằng nó không phải là một lệnh tiêu chuẩn).
Bạn có thể vô hiệu hóa các bí danh bằng cách trích dẫn chúng (mặc dù phiên bản được trích dẫn cũng có thể được đặt bí danh trong một số shell).
Vì vậy, ví dụ (ở đây cú pháp zsh), trong:
'while'() echo function while
alias 'while=echo alias while'
Viết while truethực sự sẽ xuất ra alias while true, và sẽ không có cách nào để sử dụng whiletừ khóa vì trích dẫn nó sẽ vô hiệu hóa cả bí danh và từ khóa.
Bạn sẽ gọi whilehàm với ví dụ:
'whi'le whatever
Nếu có một whilenội trang (nhưng tất nhiên chúng sẽ không có trong các vỏ có whiletừ khóa), bạn sẽ viết nó:
builtin while whatever
Và để gọi whilelệnh, bạn sẽ viết:
env while whatever
hoặc trong zsh(khi không trong shthi đua):
command while whatever
(trong các shell khác, commandchỉ ngăn chặn các chức năng, không phải nội dung)
Hoặc là
/full/path/to/while whatever
Tất nhiên, không có gì ngăn cản bạn làm những việc thậm chí còn tệ hại hơn như:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Mà, ít nhất trong zsh là hợp lệ (nhưng ngu ngốc).
commandloại bỏ tra cứu chức năng, nhưng cả hai đều không chỉ định từ đồng nghĩa còn lại nào sẽ được sử dụng. Tôi đang tìm cách để chỉ định chỉ thực hiện một từ đồng nghĩa cụ thể .