Редактировать: Обратите внимание, как написано ниже, я знаю ответы на этом сайте, объясняющие, что 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
страница руководства остается заброшенной.