Bry*_*ell 4 unix sorting bash shell
最终,我想将最新版本设置为环境变量,因此补充所选答案(这为我提供了正确的排序):
export LATEST_VERSION=$(printf '%s\n' * | sort -rV | head -1)
Run Code Online (Sandbox Code Playgroud)
我有一个目录,其中包含以下目录名称:
ls -1r .
2.0
1.8
16.1
16.0
15.5
15.0
14.5
14.1
14.0
1.3
1.2
1.1.5
1.1.3
1.1.2
Run Code Online (Sandbox Code Playgroud)
我想对它们进行排序以获得最新版本:
ls -1r . | head -1
16.1
Run Code Online (Sandbox Code Playgroud)
因此基础订单应如下所示:
16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.越简单越好,但我对任何解决方案都持开放态度.谢谢!
Joh*_*024 10
现代GNU排序提供了-V根据版本号规则进行排序的标志:
$ printf '%s\n' * | sort -rV
16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2
Run Code Online (Sandbox Code Playgroud)
注意上面没有使用ls.作为一般规则,您不应解析ls(1)的输出.
来自man sort:
-V, -
version -sort 自然排序的(版本)数字在文本中
以上内容来自GNU手册页.
FreeBSD的排序也支持-V.
Apple的排序是从2005年开始的GNU排序,早于对该-V选项的支持.可以在这里找到解决方法.(帽子提示:l'L'l,mklement0)