t\ime
hoặc \cd
(hay "tim"e
hay 'cd'
hay ${-##*}time
hay ${-+time}
và mọi sự kết hợp khác trích dẫn và mở rộng bạn có thể nghĩ rằng cuối cùng sẽ giải quyết cho time
hay cd
), đó là: một cách khác để ghi cd
và time
.
Tuy nhiên, điều đó cuối cùng sẽ giải quyết cd
hoặc time
sau một thời gian phân tích cú pháp và phân tích cú pháp shell. Đặc biệt, điều đó xảy ra rất lâu sau khi nhận dạng từ khóa shell và thay thế bí danh .
Vì vậy, tại thời điểm shell đang tìm kiếm từ khóa trong ngôn ngữ của nó, nó không được công nhận ti\me
là time
từ khóa shell. Vì vậy, một
ti\me echo test
sẽ được shell nhận ra là một lệnh đơn giản trái ngược với time
từ khóa theo sau là một lệnh đơn giản.
Sau đó, trích dẫn ti\me
sẽ được xử lý (ở đây dấu gạch chéo ngược đang trích dẫn m
ký tự không cần trích dẫn, ký tự trích dẫn sẽ bị xóa, bạn nhận được time
) và một time
lệnh sẽ được tra cứu giống như bất kỳ lệnh nào khác (trong danh sách nội dung , các chức năng và các tập tin thực thi trong $PATH
. Rất có thể sẽ /bin/time
ở đây)
Đối với cd
, không có cd
từ khóa trong ngôn ngữ shell, chỉ là một cd
lệnh dựng sẵn (được ưu tiên hơn ngôn ngữ của bạn /usr/bin/cd
). Tuy nhiên, nếu bạn định nghĩa một bí danh cho cd
(như alias cd=pushd
), tương tự một lần nữa. Vì việc thay thế bí danh được thực hiện từ rất sớm, trước khi xóa trích dẫn, nếu bạn có một bí danh cho cd
và không phải là một \cd
(lưu ý rằng không có nhiều shell cho phép các bí danh có dấu gạch chéo ngược trong đó), sau đó bằng cách viết:
\cd dir
bạn đang đảm bảo cd
bí danh của bạn không được thay thế.
Nói tóm lại, trích dẫn một tên lệnh hoặc bất kỳ phần nào của nó ngăn không cho nó được xem như là một từ khóa shell (từ khóa là điều thích while
, for
, if
, {
... time
là một từ khóa trong một số chỉ vỏ), và bỏ qua một bí danh bạn có thể cho nó .
Tuy nhiên, nó không bắt buộc lệnh đó phải giải quyết tệp thực thi $PATH
, lệnh vẫn được tìm kiếm trước tiên trong số các hàm (mà bạn có thể làm việc bằng cách thực hiện command time cmd...
) và nội dung (mà bạn có thể làm việc xung quanh bằng cách thực hiện env time cmd...
, mặc dù tôi không biết một shell có time
lệnh dựng sẵn ).
Lưu ý rằng trích dẫn cũng có thể có ảnh hưởng đến hành vi của các lệnh nội trú đặc biệt của typeset
/ declare
/ export
/ local
... gia đình ở một số vỏ. Xem các trích dẫn có cần thiết cho việc gán biến cục bộ không? để biết chi tiết.