t\ime
o \cd
(o "tim"e
o 'cd'
o ${-##*}time
oe ${-+time}
ogni altra combinazione di quotazioni ed espansioni che potresti pensare che alla fine si risolveranno in time
o cd
), è quella: un altro modo di scrivere cd
e time
.
Tuttavia, ciò alla fine si risolverebbe cd
o time
in un momento successivo dell'analisi e dell'interpretazione della sintassi della shell. In particolare, ciò avviene molto tempo dopo il riconoscimento shell parola e alias sostituzione avvengono.
Quindi, nel momento in cui la shell cerca parole chiave nella sua lingua, non la riconosce ti\me
come time
parola chiave shell. Quindi a:
ti\me echo test
sarebbe riconosciuto dalla shell come un semplice comando in contrapposizione alla time
parola chiave seguita da un semplice comando.
Quindi la quotazione ti\me
verrà elaborata (qui che la barra rovesciata sta citando il m
carattere che non ha bisogno di quotare comunque, il carattere di quotatura viene rimosso, ottieni time
) e un time
comando verrebbe cercato come qualsiasi altro comando (nell'elenco dei builtin , funzioni e file eseguibili in $PATH
. Molto probabilmente quello sarà /bin/time
qui)
Per cd
, non c'è una cd
parola chiave nel linguaggio shell, solo un cd
comando incorporato (che ha la precedenza sul tuo /usr/bin/cd
). Tuttavia, se si definisce un alias per cd
(like alias cd=pushd
), lo stesso di nuovo. Poiché la sostituzione dell'alias viene eseguita molto presto, prima della rimozione delle virgolette, se si dispone di un alias per cd
e non per uno \cd
(si noti che non molte shell consentono alias con barre rovesciate), quindi scrivendo:
\cd dir
stai assicurando che il tuo cd
alias non venga sostituito.
In breve, citando un nome di comando o di parte di esso impedisce di essere visto come parola chiave shell (parole chiave essendo cose come while
, for
, if
, {
... time
è una parola chiave in alcuni solo conchiglie), e ignora un alias si può avere per essa .
Non impone tuttavia che il comando si risolva in un file eseguibile $PATH
, il comando viene comunque cercato prima tra le funzioni (che puoi aggirare facendo command time cmd...
) e i builtin (che puoi aggirare facendo env time cmd...
, anche se non so di una shell che ha un time
comando incorporato ).
Si noti che la citazione può anche influenzare il comportamento dei builtin speciali della famiglia typeset
/ declare
/ export
/ local
... in alcune shell. Vedi Le virgolette sono necessarie per l'assegnazione delle variabili locali? per dettagli.