t\imehoặc \cd(hay "tim"ehay 'cd'hay ${-##*}timehay ${-+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 timehay cd), đó là: một cách khác để ghi cdvà time.
Tuy nhiên, điều đó cuối cùng sẽ giải quyết cdhoặc timesau 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\melà timetừ 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 timetừ khóa theo sau là một lệnh đơn giản.
Sau đó, trích dẫn ti\mesẽ được xử lý (ở đây dấu gạch chéo ngược đang trích dẫn mký 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ó cdtừ khóa trong ngôn ngữ shell, chỉ là một cdlệ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 cdvà 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 cdbí 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, {... timelà 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ó timelệ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.