Прокрутите вниз ...
Имена файлов .и ..всегда игнорируются, когда GLOBIGNOREустановлено, а не ноль.
Большая часть времени, это не желательно включать .и в ..качестве подстановочных матчей, так как они не представляют собой файлы в директории - они писаки , чтобы сделать каталог навигацию работы. Фактически, происхождение точечных файлов является ошибкой в ранней версии lsкоманды . Автор хотел исключить .и ..из списка, но случайно исключил все файлы, которые начинаются с .. Таким образом, точечные файлы стали скрытыми от ls. Снаряды следовали примеру, скрывая точечные файлы вроде ls. Однако способ, которым это было сделано, снова был хаком: файлы, начинающиеся с ., исключаются, только если точка не соответствует явно в шаблоне. Таким образом, шаблон .*включает в себя .и ...
Чтобы сохранить совместимость с существующими сценариями, современные оболочки по-прежнему включают .и ..(кроме zsh, который в этом вопросе, как и многие другие, имеет более разумное, но не обратно совместимое поведение). Однако, если вы установите GLOBIGNORE, вы используете специфичную для bash функцию, которая показывает, что вы не заинтересованы в обратной совместимости. Таким образом, сопоставление с образцом изменяется для исключения .и ..из всех совпадений с образцом.
Параметр GLOBIGNORE=.исключает файл, который в любом случае автоматически исключается всякий раз, когда GLOBIGNOREон задан, поэтому он эквивалентен shopt -s dotglobисключению .и .., кроме того, исключается из всех шаблонов.
GLOBIGNOREтолько игнорирования.и..в шаблонах без слешей, а GLOBIGNORE фильтрует пути к файлам, а не имена файлов.GLOBIGNORE=.; echo .*не будет включать.ни.., ноGLOBIGNORE=.; echo ./.*(илиecho /bin/.*) будет! Чтобы игнорировать.и..от всех шаров, похоже, что вам нужноshopt -s extglobиGLOBIGNORE='?(*/)@(.|..)'.