t\ime
ou \cd
(ou ou "tim"e
ou 'cd'
ou ${-##*}time
ou ${-+time}
qualquer outra combinação de citações e expansões que você possa pensar que acabaria resolvendo para time
ou cd
), é: outra maneira de escrever cd
e time
.
No entanto, isso acabaria resolvendo para cd
ou time
posteriormente a análise e interpretação da sintaxe do shell. Em particular, isso acontece muito depois do reconhecimento de palavras-chave do shell e da substituição de alias .
Portanto, no momento em que o shell procura palavras-chave em seu idioma, não é reconhecido ti\me
como a time
palavra-chave shell. Então um:
ti\me echo test
seria reconhecido pelo shell como um comando simples, em oposição à time
palavra - chave seguida por um comando simples.
Em seguida, a citação ti\me
seria processada (aqui que a barra invertida está citando o m
caractere que não precisa ser citado de qualquer maneira, o caractere de citação é removido, você obtém time
) e um time
comando seria pesquisado como qualquer outro comando (na lista de recursos internos) , funções e arquivos executáveis $PATH
. É provável que esteja /bin/time
aqui)
Pois cd
, não há cd
palavra-chave na linguagem shell, apenas um cd
comando interno (que tem precedência sobre o seu /usr/bin/cd
). No entanto, se você definir um alias para cd
(like alias cd=pushd
), o mesmo novamente. Como a substituição do alias é feita muito cedo, antes da remoção da cotação, se você tiver um alias para cd
e não um \cd
(observe que poucas conchas permitem aliases com barras invertidas), então escreva:
\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 a impede de ser visto como uma palavra-chave shell (palavras-chave a ser coisas como while
, for
, if
, {
... time
é uma palavra-chave em alguns apenas conchas), e ignora um alias você pode ter para ele .
No entanto, ele não força esse comando a resolver para um arquivo executável $PATH
, o comando ainda é pesquisado primeiro entre funções (que você pode contornar fazendo command time cmd...
) e builtins (que você pode contornar executando env time cmd...
, embora eu não conheça um shell que possui um time
comando interno ).
Observe que a citação também pode influenciar o comportamento dos componentes especiais da família typeset
/ declare
/ export
/ local
... em alguns shells. Consulte São necessárias cotações para atribuição de variável local? para detalhes.