Всем привет!
Сегодня полдня искал плагины в Ubuntu, и всё время находил только один.
Искал так: find -name libasound*.so
Потом таки зашёл в папку с плагинами FAR-ом и увидел, что их больше.
Опытным путём обнаружил, что искать надо было так: find -name "libasound*.so"
То есть, шаблон имени надо было закавычить.
И вот тут я сломался. Гугл говорит, что кавычки в bash нужны для того, чтобы bash воспринимал строку как есть, не пытаясь как-то хитро интерпретировать всякие спец-символы. У меня же получается наоборот: поиск начинает работать нормально, только если подстроку закавычить вместе со звёздочкой.
The filename matching is performed with the use of the fnmatch(3) library function. Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.
Перед тем как выполнить любую команду происходит parameter expansion
Поэтому если выполнить команду find . -name a*
и в каталоге есть файлы a1, a2 и a3, то баш проведет expansion и на самом деле попытается выполниться команда find . -name a1 a2 a3
что будет синтаксической ошибкой, так как непонятно что такое a2 и a3
А если написать так: find . -name "a*"
то параметр "a*" уже отправится именно в find и он его распарсит согласно всем правилам wildcard в линукс
P.S. это касается выполнения любой команды. Просто в find . -name люди чаще всего попадаются.
А так можно поэксперементировать на
echo a*
echo "a*"
Почитал про glob и ничего не понял. Зато нашёл соседний с ним man find и в нём прекрасное:
"The filename matching is performed with the use of the fnmatch(3) library function. Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell."
В общем, дело видимо не в bash-е, а в реализации команды find.