如何更改默认的bash globbing?

时间:2014-07-11 17:50:09

标签: bash glob

我有一个包含此行的Makefile:

$(CROSS_COMPILE)$(CC)$(DLFLAGS)$(LIBPATH)-o $(OUTP)/ $(SONAME)* .o $(LIBINCL)

此* .o扩展有时看起来像1.0 2.o 3.o 4.o.但是,其他时候它可以是2.o 1.o 4.o 3.o(以及其他组合)。这会导致生成的共享对象具有不同的校验和。

作为一种有限的解决方法,在某些情况下,我们将上面的行更改为:

$(CROSS_COMPILE)$(CC)$(DLFLAGS)$(LIBPATH)-o $(OUTP)/ $(SONAME)$(排序$(通配符* .o))$(LIBINCL)

但是,我无法为每个源包执行此修复。我想要的是shell(bash)根据文件名的类型执行glob替换,以便' * .o'上面的glob替换在机器和构建之间是一致的。

有什么想法吗?我可以告诉bash(默认情况下)改变它如何实现我的想法吗?

1 个答案:

答案 0 :(得分:0)

我不认为依靠通配符扩展以特定顺序返回文件名是个好主意 - 但如果您知道文件名将在某个数字间隔内,为什么不使用大括号扩展( https://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion)?

$ echo {1..4}.o
1.o 2.o 3.o 4.o