`apt-get` и подстановочные знаки: глобусы против регулярных выражений

`apt-get` и подстановочные знаки: глобусы против регулярных выражений

Редактировать: Обратите внимание, как написано ниже, я знаю ответы на этом сайте, объясняющие, что apt-getиспользует регулярные выражения для интерпретации имен пакетов. Фактически, вопрос напрямую касается того, каким образом его фактическое поведение отличается от документированного. Пожалуйста, прочтите вопрос, прежде чем предлагать дубликат.


Некоторые ответы на этом сайте предупреждают об использовании apt-getс подстановочными знаками (например, звездочками: *), поскольку apt-getэто якобы расширяет их как регулярные выражения, что может дать неожиданные (и нежелательные) результаты, особенно с apt-get remove. Действительно,manСтраница Ubuntu дляapt-getчитает:

Если ни один пакет не соответствует данному выражению и выражение содержит один из символов '.', '?' или '*', то предполагается, что это регулярное выражение POSIX, и оно применяется ко всем именам пакетов в базе данных. Затем устанавливаются (или удаляются) любые совпадения. Обратите внимание, что сопоставление выполняется по подстроке, поэтому 'lo.*' соответствует 'how-lo' и 'lowest'. Если это нежелательно, закрепите регулярное выражение символом '^' или '$' или создайте более конкретное регулярное выражение.

Фактически,этот ответпретензии:

apt-get принимает в качестве оболочки регулярное выражение, а не шаблон glob.

Я считаю, что это неправильно (по крайней мере, в отношении Xenial). Например, я могу воспроизвести следующее поведение:

$ sudo apt-get install -s 'meld*'
[...]
Note, selecting 'meld' for glob 'meld*'
[...]

$ sudo apt-get install -s 'meldt*'
[...]
Note, selecting 'python-meld3' for regex 'meldt*'
Note, selecting 'python3-meld3' for regex 'meldt*'
Note, selecting 'meld' for regex 'meldt*'
[...]

(Я не удалил ни одного совпадения, только не имеющие отношения к делу части apt-getответа.)

На основании этого поведения мне кажется, что apt-getсначала программа пытается сопоставить заданные выражения как шаблоны, и только в случае неудачи пытается повторить попытку как регулярные выражения.

Я правильно понял? Я неправильно понял страницу manили такое поведение плохо документировано?

решение1

Это объясняется вapt(8)страница руководства:

install, remove, purge (apt-get(8))
   Performs the requested action on one or more packages specified via
   regex(7), glob(7) or exact match. The requested action can be
   overridden for specific packages by append a plus (+) to the
   package name to install this package or a minus (-) to remove it.

Этот абзац отсутствует в15.10 страница руководства, поэтому его могли добавить в версии 16.04.

Кажется, об этом не упоминается в журнале изменений apt -коммит, который добавил это в 2013 годуне показывает никаких изменений в man-страницах. Это было на короткое время отключено и снова включено позже (см.совершает между маем и февралем 2014 года), иотключение упоминается в журнале изменений.

Так что это могло быть добавлено четыре года назад, нозадокументировано только в 2015 году. А apt-getстраница руководства остается заброшенной.

Связанный контент