Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用makefile函数中的if语句?_Bash_Makefile_Gnu Make - Fatal编程技术网

Bash 如何使用makefile函数中的if语句?

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语句的中间写

我正在从.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语句的中间写的,并且需要(<代码> $$>代码>),它被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;