t\ime
lub \cd
(lub "tim"e
lub 'cd'
lub ${-##*}time
i ${-+time}
i każda inna kombinacja cytatów i rozwinięć, o których można by pomyśleć, ostatecznie rozwiązałaby się na time
lub cd
), jest: innym sposobem pisania cd
i time
.
Jednak ostatecznie rozwiązałoby to parsowanie i interpretację składni powłoki cd
lub time
w późniejszym czasie. W szczególności dzieje się to długo po rozpoznaniu słowa kluczowego powłoki i podstawieniu aliasu .
Tak więc, w tym czasie powłoka szuka słów kluczowych w swoim języku, to nie uznając ti\me
jako time
słowo kluczowe powłoki. Więc:
ti\me echo test
będą rozpoznawane przez powłokę jako proste polecenie w przeciwieństwie do time
słowa kluczowego, po którym następuje proste polecenie.
Wówczas cytowanie ti\me
zostanie przetworzone (tutaj odwrotny ukośnik cytuje m
znak, który i tak nie wymaga cytowania, znak cytowania jest usuwany, otrzymujesz time
), a time
polecenie byłoby wyszukiwane jak każde inne polecenie (na liście poleceń wbudowanych , funkcje i pliki wykonywalne w $PATH
. Najprawdopodobniej będą /bin/time
tutaj)
Bo w języku powłoki cd
nie ma cd
słowa kluczowego, tylko cd
wbudowane polecenie (które ma pierwszeństwo przed twoim /usr/bin/cd
). Jeśli jednak zdefiniujesz alias cd
(podobny alias cd=pushd
), to samo ponownie. Ponieważ podstawianie aliasów odbywa się bardzo wcześnie, przed usunięciem cytatu, jeśli masz alias dla, cd
a nie jeden dla \cd
(zauważ, że niewiele powłok pozwala na aliasy z odwrotnymi ukośnikami), a następnie pisz:
\cd dir
upewniasz się, że Twój cd
alias nie jest podstawiony.
W skrócie, podając nazwę polecenia lub jakiejkolwiek jego części uniemożliwia postrzegane jako słowo kluczowe powłoki (słowa kluczowe są takie rzeczy jak while
, for
, if
, {
... time
jest to słowo kluczowe w niektórych tylko muszli), a omija aliasu może masz dla niego .
Jednak nie zmusza tego polecenia do przetworzenia pliku wykonywalnego $PATH
, polecenie jest nadal wyszukiwane najpierw wśród funkcji (które można obejść, wykonując command time cmd...
) i wbudowanych (które można obejść, wykonując env time cmd...
, chociaż nie wiem o powłoka, która ma wbudowane time
polecenie).
Zauważ, że cytowanie może również wpływać na zachowanie specjalnych wbudowań rodziny typeset
/ declare
/ export
/ local
... w niektórych powłokach. Zobacz: Czy do przypisania zmiennych lokalnych potrzebne są oferty? dla szczegółów.