【发布时间】:2015-06-09 03:19:40
【问题描述】:
我正在用 BASH 编写一个脚本,它基本上就像一个简化的 gmake 和包构建器。它只支持一种语言;这是设计使然。我不打算发布此脚本,因为它仅供本地使用。
我基本上已经让它正常工作了。在更复杂的项目上,它处理得很好。在做一个简单的测试程序时出现了一个问题。
脚本将«args» 构建为具有基本参数的合理默认值。无论“模式”如何,脚本始终执行以下形式的一行:
«compiler» «args» *.«ext»
鉴于支持的语言 (Ada) 有两个文件扩展名,以下 glob 用于编译为 «ext»:
*.{ads,adb}
当两个扩展都存在时,正如在大型项目中所预期的那样,一切都很好。但是当 $PWD 中只存在一个扩展时,脚本会失败,并且不会进行编译。
我对此感到很困惑,因为存在“干净模式”,它就是这样做的:
rm *.{ali,o,so}
即使 $PWD 中不存在某些列出的扩展名,这也有效。
我可以调用编译器两次,首先传递一个扩展名(如果存在相应的文件),然后同样传递另一个扩展名。但是,这会导致对许多文件进行两次编译,这显然是低效的。
我认为可以在脚本的早期构建 $PWD 中存在哪些扩展的 glob,然后将 glob 传递给编译器。但是,我完全不知道如何做到这一点。一些尝试让 bash 抱怨找不到命令“*.{adb,ads}”。这真的让我大吃一惊,因为我基本上只是在做:
«compiler» «args» $FoundFiles
【问题讨论】: