t\ime
ou \cd
(ou "tim"e
ou 'cd'
ou ${-##*}time
ou ${-+time}
e todas as outras combinações de cotações e expansões que você poderia imaginar que acabariam resolvendo para time
ou cd
), é isso: outra maneira de escrever cd
e time
.
No entanto, isso acabaria resolvendo para cd
ou time
em um momento posterior da análise e interpretação da sintaxe do shell. Em particular, isso acontece muito tempo após o reconhecimento da palavra-chave shell e a substituição do alias .
Assim, no momento em que o shell está procurando palavras-chave em seu idioma, ele não está reconhecendo ti\me
como a palavra-chave time
shell. Então um:
ti\me echo test
seria reconhecido pelo shell como um comando simples, em oposição à palavra-chave time
seguida por um comando simples.
Em seguida, a cotação em ti\me
seria processada (aqui, a barra invertida está citando o caractere m
, que não precisa ser cotado de qualquer maneira, o caractere de citação é removido, você recebe time
) e time
< em> comando seria consultado como qualquer outro comando (na lista de arquivos embutidos, funções e executáveis em $PATH
. O mais provável é que /bin/time
aqui)
Para cd
, não há nenhuma palavra-chave cd
na linguagem do shell, apenas um comando cd
builtin (que tem precedência sobre o /usr/bin/cd
). No entanto, se você definir um alias para cd
(como alias cd=pushd
), o mesmo novamente. Como a substituição de alias é feita muito cedo, antes da remoção da cotação, se você tiver um alias para cd
e não para \cd
(observe que não são muitos os shells que permitem aliases com barras invertidas), escrevendo:
\cd dir
você está certificando-se de que seu cd
alias não seja substituído.
Em suma, citando um nome de comando ou qualquer parte dele impede que ele seja visto como uma palavra-chave de shell (palavras-chave sendo coisas como while
, for
, if
, {
... time
é uma palavra-chave em alguns apenas shells), e ignora um apelido que você pode ter para isso.
No entanto, ele não força esse comando a ser resolvido para um arquivo executável em $PATH
, o comando ainda é pesquisado primeiro entre funções (que pode ser resolvido fazendo command time cmd...
) e < em> builtins (que você pode contornar fazendo env time cmd...
, embora eu não saiba de um shell que tenha um comando time
embutido).
Observe que as citações também podem influenciar o comportamento dos recursos internos especiais da família typeset
/ declare
/ export
/ local
... em alguns shells. Veja As citações são necessárias para a atribuição local de variáveis? para detalhes.