t\ime
ou \cd
(ou ou "tim"e
ou 'cd'
ou ${-##*}time
ou ${-+time}
et toutes les autres combinaisons de citations et d'extensions auxquelles vous pourriez penser qui finiraient par se résoudre en time
ou cd
), c'est que: une autre façon d'écrire cd
et time
.
Cependant, cela finirait par résoudre cd
ou time
ultérieurement l'analyse syntaxique et l'interprétation de la syntaxe du shell. En particulier, cela se produit longtemps après la reconnaissance des mots clés du shell et la substitution d' alias .
Ainsi, au moment où le shell recherche des mots clés dans sa langue, il ne reconnaît pas ti\me
le time
mot clé shell. Donc:
ti\me echo test
serait reconnu par le shell comme une simple commande par opposition au time
mot - clé suivi d'une simple commande.
Ensuite, le guillemet ti\me
serait traité (ici, cette barre oblique inverse cite le m
caractère qui n'a pas besoin d'être cité de toute façon, le caractère guillemet est supprimé, vous obtenez time
) et une time
commande serait consultée comme toutes les autres commandes (dans la liste des commandes intégrées) , les fonctions et les fichiers exécutables $PATH
. Très probablement qui seront /bin/time
ici)
Car cd
, il n'y a pas de cd
mot-clé dans le langage shell, juste une cd
commande intégrée (qui a priorité sur la vôtre /usr/bin/cd
). Cependant, si vous définissez un alias pour cd
(comme alias cd=pushd
), même chose. Comme la substitution d'alias est effectuée très tôt, avant la suppression des guillemets, si vous avez un alias pour cd
et pas un pour \cd
(notez que peu de shells autorisent les alias avec des barres obliques inverses), puis en écrivant:
\cd dir
vous vous assurez que votre cd
alias n'est pas remplacé.
En bref, citant un nom de commande ou une partie de celui - ci l'empêche d'être considéré comme un mot - clé shell (mots - clés étant des choses comme while
, for
, if
, {
... time
est un mot - clé dans quelques coquilles seulement), et contournements un alias que vous pouvez avoir pour elle .
Cependant, il ne force pas cette commande à se résoudre en un fichier exécutable $PATH
, la commande est toujours recherchée en premier parmi les fonctions (que vous pouvez contourner en faisant command time cmd...
) et les commandes intégrées (que vous pouvez contourner en faisant env time cmd...
, bien que je ne sache pas un shell qui a une time
commande intégrée ).
Notez que la citation peut également avoir une influence sur le comportement des commandes spéciales de la famille typeset
/ declare
/ export
/ local
... dans certains shells. Voir Des devis sont - ils nécessaires pour l'affectation de variable locale? pour plus de détails.