Сортировка версий на шелле

Периодически сталкиваюсь с задачей: как сравнить две версии вида X1.Y1.Z1 на шелле. Очень часто это делают при помощи разнообразных врапперов.

На Ruby:

1
2
Gem::Version.new('1.22.3') < Gem::Version.new('1.2.3')
# => false

Или на Python:

1
2
pkg_resources.parse_version('1.22.3') < pkg_resources.parse_version('1.2.3')
# False

Однако есть простой способ (о котором я позабыл) сравнить две версии на шелле, не запуская никаких дополнительных скриптовых языков:

1
2
3
4
5
6
cat | sort -V << EOF
1.22.3
1.2.3
EOF
# 1.2.3
# 1.22.3

Запишу здесь, чтобы больше об этом не забывать.

Из минусов — скорее всего, не будет работать на странных системах типа MacOSX.

Comments