bash - 如何将变量放入 makefile 中的 $(shell) 命令中?
问题描述
❯ make --version
GNU Make 3.81
❯ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
如何将 for 循环内部的变量传递给 $(shell)?我可以访问 $(shell) 之外的 var,但我不知道如何将其传递:
A_LIST:= one two
.PHONY: loop
loop:
@for iii in $(A_LIST) ; do \
echo inside recipe loop with sh command: $$iii ; \
export SAVED_OUTPUT=$(shell echo $$iii) ; \
echo $$SAVED_OUTPUT ; \
done
这是我得到的输出:
inside recipe loop with sh command: one
<blank line here>
inside recipe loop with sh command: two
<blank line here>
循环中的最后一行echo $$SAVED_OUTPUT
应该输出one
,two
因为它回显了 var 并将其存储在另一个 var 中。但它是一个空白行。我怀疑这是因为它正在寻找一个 env var$iii
但它不存在 - 那么如何将值传递iii
到 shell 中呢?
这是我不喜欢的一种不好的方法。我不想写一个本地文件只是为了访问这样的变量:
.PHONY: loop
loop:
@for iii in $(A_LIST) ; do \
echo inside recipe loop with sh command: $$iii ; \
echo $$iii > scratch ; \
export SAVED_OUTPUT=$(shell echo $$(cat scratch)) ; \
echo $$SAVED_OUTPUT ; \
done
解决方案
for
循环已经由 shell 执行——在这种情况下,也没有理由将其$(shell ...)
引入。只需使用普通$()
的 shell 命令替换语法(加倍$
使 make 快乐,就像变量名一样):
A_LIST:= one two
.PHONY: loop
loop:
@for iii in $(A_LIST) ; do \
echo "inside recipe loop with sh command: $$iii" ; \
SAVED_OUTPUT="$$(somecommand "$$iii")" ; \
echo "$$SAVED_OUTPUT" ; \
done
推荐阅读
- python - 如何使用pandas python附加for循环的所有输出
- angular - 如何通过量角器设置日期
- amazon-s3 - 使用 Java 应用程序将 Gzip 文件上传到 S3 存储桶时已损坏
- arrays - 将 numpy loadtxt 的输出作为单个数组而不是多个数组
- java - MongoDb 4.2 中的文档级别锁定
- python - Python ::: 带参数捕获异常
- javascript - Vue 将 Undefined 设置为值应为 0 或 false 的属性
- python - 具有双变量颜色图的 Altair 地图
- sql-server - 如何在 SQL Server 中连接两个 ID 不相同的表?
- android - 在模拟器上工作但现在在真实设备(手机)上工作的 API。扑