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