Я знаю, что *
должен интерпретироваться оболочкой, а не вызываемой командой
Теперь, если я выполню следующую команду в моем домашнем каталоге
$echo *
, я получу
Desktop Documents Pictures Downloads ...etc
Но если Я выполнил команду в пустом каталоге и получил
*
в качестве вывода
Почему это так? почему echo
print *
, а *
не экранируется и интерпретируется только оболочкой
Разве вывод не должен быть пустой строкой?
Следующий ответ дает возможное объяснение.
Я заключу в кавычки из него:
обратите внимание, что, если расширение ни к чему не приводит, т.е. в этом случае если каталог не содержит нескрытых файлов, *, оставлен без изменений и передан, как к названной команде.
Таким образом, это разворачивает подстановочный символ *, но когда это ничему не соответствует, это сохраняется, как и передал названной команде, 'отзовитесь эхом' в этом случае.