Я думал, что подстановочный знак *в команде find . -name *foo*заменен на bash, и все же команда работает, если не *foo*совпадает с чем-то в текущем каталоге, тогда это не так. Это сбивает с толку.
bashрасширен, *foo*потому что это соответствует, но прошло *bar*непосредственно, потому что это не так. nullglobОпция указывает Баш разрешить шаблоны несовпадающих пустую строку вместо:
find . -name *foo*
сfind . -name '*foo*'
ней позволит шаблонные матчи на работу , как и ожидалось.Ответы:
Если bash не может найти совпадение, он передает литеральную строку приложению с
*
нерасширенным s. Например:bash
расширен,*foo*
потому что это соответствует, но прошло*bar*
непосредственно, потому что это не так.nullglob
Опция указывает Баш разрешить шаблоны несовпадающих пустую строку вместо:источник
zsh: no matches found
.no_nomatch
вызвать это поведение.Если вы хотите
find
получить нерасширенную строку, вы можете заключить ее в кавычки или защитить символы подстановки с помощью обратной косой черты.источник