Bash 以适当的顺序使用先决条件

Bash 以适当的顺序使用先决条件,bash,makefile,Bash,Makefile,如何让make以数字顺序生成先决条件列表?我想这样做: cat file1 file2 file10 file11 file21 | script 在bash shell和Makefile中尝试此操作时: cat file* | script 这些文件用于订单文件10文件11文件1文件21文件2 这不是我想要的。在bash中,我可以强制解决如下问题: cat file{[0-9],[0-9][0-9]} 还有类似的把戏。但我不知道如何让make识别这些通配符选项,当我尝试在Makefil

如何让make以数字顺序生成先决条件列表?我想这样做:

cat file1 file2 file10 file11 file21 | script
在bash shell和Makefile中尝试此操作时:

cat file* | script
这些文件用于订单文件10文件11文件1文件21文件2 这不是我想要的。在bash中,我可以强制解决如下问题:

cat file{[0-9],[0-9][0-9]} 
还有类似的把戏。但我不知道如何让make识别这些通配符选项,当我尝试在Makefile中添加此选项的变体时,会出现许多错误:

target: file{[0-9],[0-9][0-9]}
        cat $^ | script
很明显,我不想单独列出每个文件,我只是举了几个例子,有数百个,是的,还有一些空白。那么,我怎样才能得到一个很好的制作配方,它能以数字顺序很好地使用我的文件呢?(我可以将所有文件从[digit]重命名为0[digit],但这似乎是在缩小并避免问题!)

一个选项是使用

SHELL=/bin/bash

在makefile中。其他选项对我来说似乎有点太复杂(
($sort…
不处理数字比较)。

不是最优雅的解决方案,但使用:

cat file? file?? file??? | script    # add more file?'s as necessary
会达到你想要的效果


(作为奖励,它使您的命令看起来越来越迫切地需要输入。)

这可能适合您:

# mkdir test
# cd test
# touch test{a,b}{9..11}.txt
# echo *
testa10.txt testa11.txt testa9.txt testb10.txt testb11.txt testb9.txt
# echo $(ls -v *)
testa9.txt testa10.txt testa11.txt testb9.txt testb10.txt testb11.txt
# echo testa*
testa10.txt testa11.txt testa9.txt
# echo $(ls -v testa*)
testa9.txt testa10.txt testa11.txt

我可以这样做:SHELL=/bin/bash files=$(SHELL echo文件{[0-9],[0-9][0-9]})目标:$(文件)cat$^脚本。谢谢它应该与目标命令一起使用:尝试
target:
echo$$0
,并且它应该打印“/bin/bash”,如果它不同时收集fileA、fileB和filedat,这将起作用,它们也存在但不包括在内。哦,亲爱的。在那里,我认为我是一个出色的shell脚本编写者,我从来没有意识到ls-v。我感到羞愧!这是一个非常有用的ls选项。这一事件凸显了阅读手册页的重要性!