所以我有一个Makefile,其中我有以下代码,我试图理解:
for file_exe in `find . -name "zip_exe-*"`; do \
./$${file_exe} -d $(UNZIP_PATH)/lib; \
done
据我所知,这段代码将尝试找到一些可执行的zip并将这些zip文件解压缩到一个位置。但令我困惑的是$${file_exe}
是如何运作的。为什么需要双$$
?我想这与某些bash命令从makefile运行这一事实有关,但我无法向自己解释为什么需要$$
而简单的$
不起作用,因为这命令正在运行一个子shell。
答案 0 :(得分:12)
需要区分是否要将$
用作引入生成变量引用,例如${FOOBAR}
或传递给shell的普通$。 make specification(Section Macros)表示要执行后者,必须使用由$$
替换的$
并传递给shell。实际上,您的代码段显示为
for file_exe in `find . -name "zip_exe-*"`; do \
./${file_exe} -d some/unzip/path/lib; \
done
到shell。
样式注释:迭代由反引号创建的文件列表被认为是错误的样式,因为它可能溢出ARG_MAX限制。最好用
逐个读取文件名find . -name "zip_exe-*" | \
while read -r file_exe; do \
./${file_exe} -d some/unzip/path/lib; \
done