`apt-get` とワイルドカード: グロブと正規表現

`apt-get` とワイルドカード: グロブと正規表現

編集: 以下に書かれているように、このサイトにはパッケージ名を解釈するために正規表現を使用するという説明があることを認識していますapt-get。実際、質問は、実際の動作が文書化された動作とどのように異なるかを直接的に問うものです。重複を提案する前に、質問を読んでください。


このサイトの回答の中には、apt-getワイルドカード(アスタリスク*)の使用について警告しているものapt-getもあります。これは、 がそれらを正規表現として展開し、特に を使用する場合に予期しない(望ましくない)結果をもたらす可能性があるためですapt-get remove。確かに、Ubuntumanのページ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年にこれを追加したコミットマニュアルページには変更が反映されません。これは一時的に無効になり、後で再度有効になりました(2014年5月から2月までのコミット)、 そして無効化については変更履歴に記載されています

これは4年前に追加されたかもしれませんが2015年にのみ記録された. そしてapt-getの man ページは無視されたままです。

関連情報