Как GLOBIGNORE работает?

Это - по всей вероятности файл, расположенный в /etc/apt/sources.list.d/ каталог. /etc/apt/sources.list.d/ используется несколькими сторонними приложениями для разрешения автоматических обновлений, не имея необходимость изменять /etc/apt/sources.list. Это, кажется, было добавлено с Кв. 0.6.43 в 2005.

15
17.12.2013, 02:49
2 ответа

Прокрутите … вниз

Имена файлов . и .. всегда игнорируются когда GLOBIGNORE установлен и не пустой.

Большую часть времени не желательно включать . и .. поскольку подстановочный знак соответствует, так как они не представляют файлы в каталоге — они - взломы, чтобы заставить навигацию каталога работать. На самом деле источник точечных файлов является ошибкой в ранней версии ls команда. Автор означал исключать . и .. из списка, но случайно исключенный все файлы, которые начинаются .. Таким образом точечные файлы стали скрытыми от ls. Оболочки следовали примеру путем сокрытия точечных файлов как ls. Однако способом, которым это было сделано, был снова взлом: начало файлов . только исключены, если точка не подобрана явно в шаблоне. Так шаблон .* включает . и ...

Для сохранения совместимости с существующими сценариями современные оболочки все еще включают . и .. (кроме zsh, который по этой проблеме как многие другие имеет более нормальное, но не обратно совместимое поведение). Однако, если Вы устанавливаете GLOBIGNORE, Вы используете определенную для удара функцию, которая показывает, что Вы не интересуетесь обратной совместимостью. Таким образом, сопоставление с образцом изменяется для исключения . и .. от всех соответствий шаблона.

Установка GLOBIGNORE=. исключает файл, который исключен автоматически так или иначе каждый раз, когда GLOBIGNORE установлен, таким образом, это эквивалентно shopt -s dotglob за исключением того, что . и .. кроме того, исключены из всех шаблонов.

14
27.01.2020, 19:50
  • 1
    На самом деле я просто понял установку GLOBIGNORE только проигнорируйте . и .. в шаблонах наклонной черты меньше и GLOBIGNORE фильтрует пути к файлам не имена файлов. GLOBIGNORE=.; echo .* не будет включать . ни .., но GLOBIGNORE=.; echo ./.* (или echo /bin/.*) будет! Проигнорировать . и .. от всех шариков похоже, что Вам нужно shopt -s extglob и GLOBIGNORE='?(*/)@(.|..)'. –  Stéphane Chazelas 06.03.2016, 23:46
  • 2
    На самом деле, нет, GLOBIGNORE='?(*/)@(.|..)' не удался бы исключить . и .. в .*/foo. GLOBIGNORE='?(*/)@(.|..)?(/*)' повредил бы шарики как ./*... –  Stéphane Chazelas 07.03.2016, 00:29

От раздела, наделенного правом "Расширение Пути" в man bash:

Имена файлов ''.'' и ''..'' всегда игнорируются, когда GLOBIGNORE установлен и не пустой.

3
27.01.2020, 19:50

Теги

Похожие вопросы