Bash 如何使用makefile函数中的if语句?
我正在从.config文件读取配置,如果启用了配置,我想执行一些操作。我编写了以下函数,但它抛出错误消息“/bin/sh:1:语法错误:”)“意外(应为“then”)”Bash 如何使用makefile函数中的if语句?,bash,makefile,gnu-make,Bash,Makefile,Gnu Make,我正在从.config文件读取配置,如果启用了配置,我想执行一些操作。我编写了以下函数,但它抛出错误消息“/bin/sh:1:语法错误:”)“意外(应为“then”)” define parse\u configs 读取-r文件时;做\ config=$$(echo$$file | grep-Po'(?语句有什么问题: $$(if $(findstring y, $$val), echo "do Ops", echo "No ops"); 那实际上是一个, 打电话给, 在shell语句的中间写
define parse\u configs
读取-r文件时;做\
config=$$(echo$$file | grep-Po'(?语句有什么问题:
$$(if $(findstring y, $$val), echo "do Ops", echo "No ops");
那实际上是一个,
打电话给,
在shell语句的中间写的,并且需要(<代码> $$>代码>),它被shell扩展,但对shell没有意义。
它也可以是Javascript,用适当的shell if语句替换它,例如
while read -r file; do \
config=$$(echo $$file | grep -Po '(?<=(CONFIG_)).*(?==)'); \
val=$$(echo $$file | grep -Po '(?<=(=)).*'); \
if [ -z $${val##*"y"*} ]; then echo "do Ops"; else echo "No ops"; fi; \
done < .config;
读取-r文件时;执行以下操作\
config=$$(echo$$file | grep-Po'(?呃,有很多更好的方法可以做到这一点……:'(你能显示你的.config吗?你找错地方了——Make没有抱怨特定的if
语句——Make没有使用then
,所以它不需要。你应该公布你是如何调用宏的,因为可能有什么东西导致了你的问题。代码中的一点是但是--您正在从withing$(findstring y,$$val)
引用$$val
。因为只有一个$
,所以当第一次读取宏体时,findstring
将展开,因此在字符串literal$val
中查找y
(每次都不会返回任何内容).Make将在分配val之前尝试展开$(findstring y,$$val)
。这将如何工作?
while read -r file; do \
config=$$(echo $$file | grep -Po '(?<=(CONFIG_)).*(?==)'); \
val=$$(echo $$file | grep -Po '(?<=(=)).*'); \
if [ -z $${val##*"y"*} ]; then echo "do Ops"; else echo "No ops"; fi; \
done < .config;