編集: 以下に書かれているように、このサイトにはパッケージ名を解釈するために正規表現を使用するという説明があることを認識しています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 ページは無視されたままです。