t\ime
o \cd
(o "tim"e
o 'cd'
o ${-##*}time
o ${-+time}
y cualquier otra combinación de citas y expansiones en las que pueda pensar que eventualmente se resolvería time
o cd
), es eso: otra forma de escribir cd
y time
.
Sin embargo, que con el tiempo a resolver cd
o time
en un momento posterior del analizador sintáctico de la cáscara y la interpretación. En particular, eso sucede mucho después de que se produce el reconocimiento de palabras clave de shell y la sustitución de alias .
Entonces, en el momento en que el shell busca palabras clave en su idioma, no lo reconoce ti\me
como la time
palabra clave del shell. Entonces a:
ti\me echo test
sería reconocido por el shell como un comando simple en lugar de la time
palabra clave seguida de un comando simple.
Luego ti\me
, se procesaría la cita (aquí la barra invertida está citando el m
carácter que no necesita cita de todos modos, el carácter de cita se elimina, se obtiene time
) y se buscaría un time
comando como cualquier otro comando (en la lista de incorporados , funciones y archivos ejecutables $PATH
. Lo más probable es que esté /bin/time
aquí)
Para cd
, no hay cd
palabra clave en el lenguaje de shell, solo un cd
comando incorporado (que tiene prioridad sobre su /usr/bin/cd
). Sin embargo, si define un alias para cd
(like alias cd=pushd
), lo mismo de nuevo. Como la sustitución de alias se realiza muy temprano, antes de eliminar las comillas, si tiene un alias para cd
y no uno para \cd
(tenga en cuenta que no muchos shells permiten alias con barras invertidas en ellos), luego escribiendo:
\cd dir
te estás asegurando de que tu cd
alias no esté sustituido.
En resumen, citando un nombre de comando o cualquier parte de ella le impide ser visto como una palabra clave de shell (palabras clave ser cosas como while
, for
, if
, {
... time
es una palabra clave en algunos sólo conchas), y no pasa por un alias que pueda tener para él .
Sin embargo, no obliga a ese comando a resolverse en un archivo ejecutable $PATH
, el comando todavía se busca primero entre las funciones (que puede solucionar haciendo command time cmd...
) y las incorporadas (que puede solucionar haciendo env time cmd...
, aunque no sé de un shell que tiene un time
comando incorporado ).
Tenga en cuenta que las citas también pueden influir en el comportamiento de los componentes especiales de la familia typeset
/ declare
/ export
/ local
... en algunos depósitos. Consulte ¿Se necesitan cotizaciones para la asignación de variables locales? para detalles.