When specifying version numbers, such as in `dpkg --compare-versions` or the various `control` fields (e.g. `Depends:`, `Conflicts:`, etc), you may notice that in some cases there is a tilde after the version number (e.g. `1.4~`) and in some cases there isn't. According to [http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version Debian Policy]: The lexical comparison is a comparison of ASCII values modified so that all the letters sort earlier than all the non-letters and so that a tilde sorts before anything, even the end of a part. For example, the following parts are in sorted order from earliest to latest: ~~, ~~a, ~, the empty part, a.[[BR]] ...[[BR]] One common use of ~ is for upstream pre-releases. For example, 1.0~beta1~svn1245 sorts earlier than 1.0~beta1, which sorts earlier than 1.0. A good rule of thumb is that the tilde is generally needed for '''earlier''' (`<<`, `lt`) and '''later-or-equal''' (`>=`, `ge`) comparisons, and not needed for '''later''' (`>>`, `gt`) or '''earlier-or-equal''' (`<=`, `le`). When using `dpkg --compare-versions`, not that by default an empty version (i.e. the package is not installed or the package is being installed for the first time, depending on context) is treated as the earliest possible version. The `lt`, `le`, `gt`, and `ge` comparison operators have alternative versions with a trailing `-nl` (e.g. `gt-nl`) which treat an empty version as the latest possible version. When constructing `dpkg --compare-versions` conditionals, remember to verify that the flow control is correct for both upgrade and fresh installs.