[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1.4 バージョン・ソートの詳細

ファイル名にはインデックス番号やバージョン番号が含まれていることがしばしばあるが、 バージョン・ソートは、そうした状況に対処している。 通常のソートでは、1 文字づつ文字の比較を行うので、結果がこちらの期待する順番にならないことがよくあるのだ。 バージョン・ソートが特に役に立つのは、 インデックス番号やバージョン番号を名前に含むファイルがたくさんあるディレクトリを一覧するときである。

 
$ ls -1            $ ls -1v
abc.zml-1.gz       abc.zml-1.gz
abc.zml-12.gz      abc.zml-2.gz
abc.zml-2.gz       abc.zml-12.gz

バージョン・ソートにおける文字列の比較は、次のように行われる。 ver1ver2 がバージョン番号で、prefix (前置部分) と suffix (後置部分) が文字列だとしよう (suffix は正規表現の ‘(\.[A-Za-z~][A-Za-z0-9~]*)*’ にマッチするもの)。その場合、ver1 < ver2 ならば、“prefix ver1 suffix” から構成される名前は “prefix ver2 suffix” より前に来る。

数字の部分の先行する 0 は無視されることにも注意していただきたい。

 
$ ls -1            $ ls -1v
abc-1.007.tgz      abc-1.01a.tgz
abc-1.012b.tgz     abc-1.007.tgz
abc-1.01a.tgz      abc-1.012b.tgz

この機能は gnulib の filevercmp 関数を使って実装されている。 そこで、知っておいた方がよい注意事項がいくつかある。


This document was generated on June 7, 2022 using texi2html 1.82.