Bash-compare-versions

From I Will Fear No Evil
Revision as of 09:09, 22 October 2021 by Chubbard (talk | contribs)
Jump to navigation Jump to search

This is a simplistic way to compare version numbers. This is useful for when commands change over time, and you do not know which or what kind of host will have which version of something.

echo -e "2.22\n11.3.4" | sort -V
2.22
11.3.4
printf '%s\n2.15\n' $(ldd --version | sed -n '1s/.* //p') | sort -V | head -n 1
printf '%s\n2.22\n' $(git --version | sed -n '1s/.* //p') | sort -V

Example: (show the git branch you are on)

if [[ $(printf '%s\n2.22\n' $(git --version | sed -n '1s/.* //p') | sort -V) != "2.22" ]]; then
  echo "Earlier version than cutoff"
  git rev-parse --abbrev-ref HEAD
else
  echo "Later version of cutoff"
  git branch --show-current
fi

If there is a v floating about in your returned string, simply append the following to remove all a-z and A-Z characters.

| tr -d [:alpha:]

It is important to note that this really IS a string compare and ordering, so watch out for the following:

echo -e "2.22\n2.22.0" | sort -V
2.22
2.22.0