如何在没有临时文件的情况下将一些文本附加到管道

Moh*_*hit 0 unix linux bash shell pipe

我试图从我有一个程序的几个版本的目录中获取最大版本号

例如,如果ls的输出是

something01_1.sh
something02_0.1.2.sh
something02_0.1.sh
something02_1.1.sh
something02_1.2.sh
something02_2.0.sh
something02_2.1.sh
something02_2.3.sh
something02_3.1.2.sh
something.sh
Run Code Online (Sandbox Code Playgroud)

我得到的最大版本号如下 -

ls somedir | grep some_prefix | cut -d '_' -f2 | sort -t '.' -k1 -r | head -n 1
Run Code Online (Sandbox Code Playgroud)

现在,如果同时我想用我已经在系统中的版本号检查它,最好的方法是什么...

在bash我得到了这个工作(如果2.5是当前版本)

(ls somedir | grep some_prefix | cut -d '_' -f2; echo 2.5) | sort -t '.' -k1 -r | head -n 1
Run Code Online (Sandbox Code Playgroud)

有没有其他正确的方法呢?

编辑:在上面的例子中some_prefix是something02.

编辑:这里的实际问题是

(ls smthing; echo more) | sort 
Run Code Online (Sandbox Code Playgroud)

它是将两个命令/程序的输出合并为第三个管道的最佳方法.

Moh*_*hit 7

我找到了解决方案.看起来最好的方法是使用流程替换.

cat <(ls smthing) <(echo more) | sort
Run Code Online (Sandbox Code Playgroud)

对于我的版本示例

cat <(ls somedir | grep some_prefix | cut -d '_' -f2) <(echo 2.5) | sort -t '.' -k1 -r | head -n 1
Run Code Online (Sandbox Code Playgroud)

为了未来的读者的利益,我建议 - 请放弃单线的诱惑,并使用glob作为chepner建议.

超级用户问了几乎相似的问题.

有关流程替换的更多信息.