t\ime
или \cd
(или "tim"e
или 'cd'
или ${-##*}time
или ${-+time}
и любая другая комбинация цитирования и расширений, о которой вы могли бы подумать, что в конечном итоге разрешит time
или cd
), такова: другой способ написать cd
и time
.
Тем не менее, это в конечном итоге приведет к cd
или time
к более позднему времени синтаксического анализа и интерпретации оболочки. В частности, это происходит спустя долгое время после распознавания ключевых слов оболочки и замены псевдонимов .
Таким образом, в то время как оболочка ищет ключевые слова на своем языке, она не распознается ti\me
как time
ключевое слово оболочки. Итак:
ti\me echo test
будет распознаваться оболочкой как простая команда, а не как time
ключевое слово, за которым следует простая команда.
Затем ti\me
будет обработано цитирование (здесь обратная косая черта заключает в кавычки m
символ, который в любом случае не нужно заключать в кавычки, символ цитирования удаляется time
), и time
команда будет выглядеть как любая другая команда (в списке встроенных функций). , функции и исполняемые файлы в $PATH
. Скорее всего, что будет /bin/time
здесь)
Ведь в языке оболочки cd
нет cd
ключевого слова, только cd
встроенная команда (которая имеет приоритет над вашей /usr/bin/cd
). Однако, если вы определите псевдоним для cd
(как alias cd=pushd
), то же самое снова. Поскольку подстановка псевдонимов выполняется очень рано, перед удалением кавычек, если у вас есть псевдоним для, cd
а не один для \cd
(обратите внимание, что не многие оболочки допускают псевдонимы с обратными косыми чертами в них), то пишите:
\cd dir
вы убедитесь, что ваш cd
псевдоним не заменен.
Короче говоря, со ссылкой на имя команды или какую - либо его часть не мешает ему быть рассматриваются в качестве ключевого слова оболочки (ключевых слов быть вещи , как while
, for
, if
, {
... time
это ключевое слово в некоторых только оболочках), и обходят псевдоним , вы можете иметь для него ,
Однако это не заставляет эту команду преобразовываться в исполняемый файл $PATH
, команда по-прежнему ищется первой среди функций (которые вы можете обойти, выполняя command time cmd...
) и встроенных функций (которые вы можете обойти, выполняя env time cmd...
, хотя я не знаю, оболочка, которая имеет встроенную time
команду).
Обратите внимание, что цитирование может также влиять на поведение специальных встроенных элементов семейства typeset
/ declare
/ export
/ local
... в некоторых оболочках. См. Нужны ли кавычки для назначения локальной переменной? для деталей.